我有一些控制隐藏div的javascript。现在它适用于大多数页面,但是在其他页面上使用其他javascripts它不起作用...我的js写得不好吗?
$(document).ready(function() {
$("#user-dropdown-toggle").live ('click', function() {
$("#left-user-bar").addClass("open");
$("#user-dropdown-toggle").addClass("league-judgement");
$("body").addClass("league-judgement");
});
$(".league-judgement").live('click', function() {
$("#left-user-bar").removeClass("open");
$("#user-dropdown-toggle").removeClass("league-judgement");
$("body").removeClass("league-judgement");
});
});
Firefox在错误控制台中报告以下内容:
时间戳:2012年4月18日下午9:08:21 错误:$(“#user-dropdown-toggle”)为空
答案 0 :(得分:9)
jQuery中的$
函数 将永远不会返回null
。所以很可能它是一个不同的非jQuery < / em> $
正在使用中。 (是否有任何ASP.NET东西或prototype.js或其他库被使用?稍后声明的自定义$
函数?)
我知道$
本身不是 null
因为异常会有所不同,例如:“$不是函数”。在这种情况下,浏览器会说 表达式($(...)
)的结果为null
,这使我得出上述结论。
尝试:
$(document).ready(function($) { // <-- note $ there
...
});
或者,更好的是,因为它只依赖window.jQuery
而非window.$
:
jQuery(function($) { // <-- note $ there
...
});
而且,如果这样可行,那么$
在“就绪”事件之前被摧毁(但在$(...).ready
之后)。当然,有可能(但不太可能)$
已经而不是jQuery ......
要查看$
是否为jQuery(使用Web Developer Console或Firebug):
$ === jQuery
通常应该是真的,但可能不依赖于noConflict
等$.fn.jquery
和$().jquery
都应该将jQuery版本作为字符串$
(仅指定控制台上的功能将“显示源”)顺便说一下,我会缩进函数体(例如在“ready”回调中),以便更清楚地看到它的开始/结束位置。
快乐的编码。
答案 1 :(得分:1)
我要检查的第一件事是确保所有页面都包含jQuery。我认为是这种情况,因为它没有$(document).ready位的问题,但你永远不知道。
请查看此帖子了解详情:jQuery $("#field") is null?
答案 2 :(得分:0)
您应该添加您的jquery脚本/包含行。
另外你在同一页面上提到“其他JS”..你应该检查它没有加载不同版本的JQuery而不是你正在使用的版本 - 覆盖你的库的导入版本......