为什么jQuery不能识别我页面上的元素?

时间:2010-07-12 16:50:53

标签: jquery html asp.net-mvc

我遇到问题,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') 无法不应为空,因为在文档准备好的时候,<div class="ActionControl">肯定存在于页面上并且它可以正常工作当我不使用包装。我可以用FireBug&amp; IE Dev工具栏。

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

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

4 个答案:

答案 0 :(得分:6)

当jQuery选择器不匹配任何元素时,它返回一个空数组,而不是null。这意味着没有加载jQuery。您的路径“/Scripts/jquery-1.4.1.js”可能在其“包装器”页面的上下文中无效。也许使用google托管的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.
});

答案 1 :(得分:0)

是否在页面上加载了jQuery库?

答案 2 :(得分:0)

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

如果您所拥有的功能正在重写包含实时功能的块,我会很好奇。

你能否至少让我们知道lambda函数在做什么?

答案 3 :(得分:0)

看起来像jQuery的旧版本包含来自和覆盖你的jQuery版本。 .live在该版本中不可用,这可能导致错误。