是什么原因导致某些页面上的jQuery“$(...)为null”?

时间:2012-04-19 03:12:58

标签: javascript jquery null

我有一些控制隐藏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”)为空

3 个答案:

答案 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而不是你正在使用的版本 - 覆盖你的库的导入版本......