【问题标题】:Why doesn't jQuery recognise the elements on my page?为什么 jQuery 不能识别我页面上的元素?
【发布时间】:2010-07-13 01:23:29
【问题描述】:

我遇到了 jQuery 无法识别我页面上的元素并抛出错误说我尝试选择的元素为空的问题。

我们将我们的内容插入到客户端提供的以下包装器中:

http://www.ft.com/global/mm0802/ag/wrapper

包装器包含以下字符串:

<!-- ftplchol id="contentFixed" version="1.0" -->

我们用我们的内容替换然后渲染页面。

这是我们内容的一个示例:(我遇到的问题在下面描述)

<script src="/Scripts/jquery-1.4.1.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
    $(document).ready(function () {

        $('.ActionControl a').live("click", function () {
            $.get($(this).attr("href"), {}, function (result) {
                // do stuff with result
                });
            }, "html");

            return false;
        });
    });
</script>

<div class="ActionControl">
    <span>Fund Directory</span>

    <span>
        <a href="/funddirectory/DirectoryResult">A</a>
    </span>

    <span>
        <a href="/funddirectory/DirectoryResult/B">B</a>
    </span>

    <span>
        <a href="/funddirectory/DirectoryResult/C">C</a>
    </span>    
</div>

当我在包装器的上下文之外运行我的东西时,一切都很好。我的代码按预期运行。但是,当我在将内容插入包装器的情况下运行整个页面时,以下行会引发错误:

$('.ActionControl a').live("click", function () {

$('.ActionControl a') 为空。具体:Microsoft JScript runtime error: 'null' is null or not an object

虽然没有任何意义。 $('.ActionControl a') couldn'tshouldnt 为空,因为当文档准备好时,&lt;div class="ActionControl"&gt; 肯定存在于页面上,当我不这样做时它可以工作' t 使用包装器。我可以通过 FireBug 和 IE Dev 工具栏看到它。

即使我尝试获取类似$('a')$('div') 的内容(页面上有很多),它仍然会引发相同的错误。我知道 jQuery 正在工作,因为 $(document).ready() 函数有效..

有谁知道为什么这不起作用?包装器中有什么东西会阻止它看到我的控件或任何其他控件吗?

【问题讨论】:

  • 你能把你的措辞精简一点吗?

标签: jquery html asp.net-mvc


【解决方案1】:

当 jQuery 选择器不匹配任何元素时,它返回一个空数组,而不是 null。这意味着没有加载 jQuery。您的路径“/Scripts/jquery-1.4.1.js”在其“包装器”页面的上下文中可能无效。也许改用谷歌托管的 jQuery 版本,它可以在所有情况下工作:

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript" charset="utf-8"></script>

更新: 我突然想到,您可能会与 jQuery 和另一个使用“$”符号的 javascript 库发生冲突。尝试使用 jQuery 的“noConflict”模式(http://api.jquery.com/jQuery.noConflict/),看看它是否适用于这种情况:

$.noConflict();
jQuery(document).ready(function($) {
    // Code that uses jQuery's $ can follow here.
});

【讨论】:

  • 我刚试过这个,它仍然抛出同样的错误:Microsoft JScript runtime error: 'null' is null or not an object
  • @Dave - 是时候让您展示被 // do stuff with result 替换的代码了。
  • 似乎就是这样。我的功能按预期工作。谢谢!!
【解决方案2】:

页面是否加载了jQuery库?

【讨论】:

  • 是的,事实上$(document).ready() 行似乎工作正常。当我删除对 j​​Query 的引用时,该行失败
【解决方案3】:

当人们重新加载页面并“替换”最初调用的 javascript 时,我已经看到了这个问题。由于重写,对原始 lambda 函数的引用丢失了。

我会很好奇你的函数是否正在重写包含实时函数的块。

您能否至少让我们了解一下 lambda 函数在做什么?

【讨论】:

    【解决方案4】:

    看起来旧版本的 jQuery 包含在 from 中,并覆盖了您的 jQuery 版本。 .live 在该版本中不可用,这可能是导致错误的原因。

    【讨论】:

      猜你喜欢
      • 2012-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-19
      • 2023-04-05
      • 2016-03-17
      • 2021-03-30
      • 1970-01-01
      相关资源
      最近更新 更多