5

非表示のdivを制御するjavascriptがあります。今ではほとんどのページで機能しますが、他のjavascriptを含む他のページでは機能しません...私の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日21:08:21エラー:$( "#user-dropdown-toggle")がnull

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 を使用):

  • $ === jQuerynoConflictは一般的に true である必要がありますが、などに依存しない場合があります。
  • $.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 script/include 行を追加する必要があります。

また、同じページで「他のJS」について言及しています..使用しているバージョンとは異なるバージョンのJQueryをロードしていないことを確認する必要があります-ライブラリのインポートされたバージョンをオーバーライドします.....

于 2012-04-19T03:45:35.403 に答える