文書に$(document).ready(function()
という1つのインスタンスしかないことを確認するにはどうすればよいですか?
複数回含まれている場合、重複するインスタンスを削除することはできますか(PHPのrequire_once();
関数に似ています)?
文書に$(document).ready(function()
という1つのインスタンスしかないことを確認するにはどうすればよいですか?
複数回含まれている場合、重複するインスタンスを削除することはできますか(PHPのrequire_once();
関数に似ています)?
正確に同じコードを複数回追加できますか?
もしそうなら、内部でコードがすでに実行されているかどうかを示すグローバルプロパティを設定し、次にready()
ハンドラ内のそのプロパティをテストすることができます。
$(document).ready(function() {
// check a flag to see if this has been called yet
if(!window.thisCodeHasRun) {
// set the flag to show this has been called
window.thisCodeHasRun = true;
/* run your code */
}
});
これはサーバー側で処理する方がよいでしょうが、クライアント側で行う必要がある場合は、これが機能するはずです。
一つのオプションは、バインドを使用してバインド解除することです:上記で
$(document).bind("ready",function(){
console.log("zero");
});
$(document).bind("ready",function(){
console.log("one");
});
// get rid of previous ready events
$(document).unbind("ready");
$(document).bind("ready",function(){
console.log("two");
});
をアンバインドが呼び出されているため、第1、第2および準備のイベントが発火することはありません。つまり、コンソールに「2」が表示されます。
write clean javascript? :P – Petrogad
ちょっとした注意:複数の '$(document).ready'関数を持つことはまったく問題です。追加された順に呼び出されます。 – BrokenGlass
@BrokenGlass:それらは常に順番に呼び出されるわけではありません。http://bugs.jquery.com/ticket/7279 - これは、準備完了イベントにバインドする場合にのみ発生します。 – Mottie