5

我有一些控制隐藏 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 在错误控制台中报告以下内容:

时间戳:4/18/2012 9:08:21 PM 错误:$("#user-dropdown-toggle") 为空

4

3 回答 3

9

jQuery 中$函数永远不会返回。null所以很可能它是一个不同的非 jQuery $在使用中。(是否有任何 ASP.NET 的东西或prototype.js 或其他正在使用的库?$稍后声明的自定义函数?)

我知道这$本身并不是 null因为异常会有所不同,例如:“$ 不是函数”。在这种情况下,浏览器说表达式 ( )的结果是,这使我得出上述结论。$(...)null

尝试:

$(document).ready(function($) { // <-- note $ there
   ...
});

或者,更好的是,因为它只依赖于window.jQuery而不是window.$

jQuery(function($) { // <-- note $ there
   ...
});

而且,如果这有效,那么它就是$在“就绪”事件之前(但之后$(...).ready)被破坏了。当然,有可能(但不太可能)此时jQuery已经$不是...

要查看是否$是 jQuery(使用 Web 开发人员控制台或 Firebug):

  • $ === jQuery通常应该是正确的,但它可能不取决于noConflict
  • $.fn.jquery并且$().jquery都应该以字符串形式生成 jQuery 版本
  • $(只需在控制台上指定函数将“显示源”)

顺便说一句,我会缩进函数体(例如在“就绪”回调中)以更清楚地查看它的开始/结束位置。

快乐编码。

于 2012-04-19T03:22:41.187 回答
1

我要检查的第一件事是确保所有页面都包含 jQuery。我认为是这种情况,因为 $(document).ready 位没有问题,但你永远不知道。

查看这篇文章了解更多信息:jQuery $("#field") is null?

于 2012-04-19T03:17:08.543 回答
0

您应该添加您的 jquery 脚本/包含行。

您还在同一页面上提到“其他 JS”.. 您应该检查它是否没有加载与您正在使用的版本不同的 JQuery 版本 - 覆盖您导入的库版本.....

于 2012-04-19T03:45:35.403 回答