2011-02-21 12 views
0

文書に$(document).ready(function()という1つのインスタンスしかないことを確認するにはどうすればよいですか?

複数回含まれている場合、重複するインスタンスを削除することはできますか(PHPのrequire_once();関数に似ています)?

+2

write clean javascript? :P – Petrogad

+0

ちょっとした注意:複数の '$(document).ready'関数を持つことはまったく問題です。追加された順に呼び出されます。 – BrokenGlass

+0

@BrokenGlass:それらは常に順番に呼び出されるわけではありません。http://bugs.jquery.com/ticket/7279 - これは、準備完了イベントにバインドする場合にのみ発生します。 – Mottie

答えて

3

正確に同じコードを複数回追加できますか?

もしそうなら、内部でコードがすでに実行されているかどうかを示すグローバルプロパティを設定し、次に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 */ 
    } 
}); 

これはサーバー側で処理する方がよいでしょうが、クライアント側で行う必要がある場合は、これが機能するはずです。

0

一つのオプションは、バインドを使用してバインド解除することです:上記で

$(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」が表示されます。

+1

準備完了イベントコードは必ずしも順番に実行されるわけではありませんので、期待通りに動作しません。http://bugs.jquery.com/ticket/7279 – Mottie

+0

+1とても興味深い – Zevan

関連する問題