我遇到问题,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()
函数有效..
有谁知道为什么这不起作用?包装器中是否有某些东西会阻止它看到我的控件或任何其他控件?
答案 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
在该版本中不可用,这可能导致错误。