2012-05-06 3 views
2

私はlab.js 2.0.3をスクリプトの並列読み込みに使用します 問題は、 。$(ウィンドウ)「。一部はあまりにも多くの火力早いとの一部 "" $(ドキュメント).readyが正常に動作

例.LOAD:

<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script> 

<script src="http://cdnjs.cloudflare.com/ajax/libs/labjs/2.0.3/LAB.min.js" type="text/javascript"></script> 

<script> 
    $LAB 
     .script("script1.js") 
     .script("script2.js") 
     .script("script3.js") 

     .wait(function(){ 

      $(window).load(function() { 
       // Function 1 
       $("jQuery Function 1"); 
       // Function 2 
       $("jQuery Function 2"); 
      }); 

      $(document).ready(function() { 
       // Function 3 
       $("jQuery Function 3"); 
       // Function 4 
       $("jQuery Function 4"); 
      }); 

     }); 
</script> 

私は間違って何かをすることを、推測するが、何も知らない:

+1

なぜ、window.loadが必要ですか?あなたは '$(document).ready()'の中にすべてを入れることはできませんか? –

+0

あなたの定義は「早すぎますか? 'script [123] .js'が読み込まれる前に? –

+0

$(document).ready()で "script1"を呼び出すことはできません。理由は分かりませんが、うまくいきません。スクリプト開発者はこれを自分のサイトに書いています。 – ComixZ

答えて

4

これは、$(window).load()が1ページに1回しか発生しないことが原因である可能性があります。あなたがそれを逃したスクリプトの読み込み、それを逃した。したがって、.wait.loadの間には、あなたが勝ち負けるかどうかは実際に予測できない競合状態があります。

$(document).ready()は、イベントが発生した後でも新しいコールバックを追加でき、依然として呼び出されるという点で、遅延オブジェクトに似ています。あなたは、これはここに示された見ることができます

http://jsfiddle.net/coiscir/AFszS/1/

$(window).load(function() { 
    console.log('outer window.load'); 

    // bind after the event 
    setTimeout(function() { 
     $(window).load(function() { 
      console.log('inner window.load'); // you'll never see this 
     }); 
    }, 10); 
}); 

あなたは.loadため.readyと同様の効果をしたい場合は、あなたが実際のイベントとあなたのコールバックの間を仲介するDeferred Objectを使用することができます。http://jsfiddle.net/coiscir/m4D46/

var windowLoad = $.Deferred(); 

$(window).load(windowLoad.resolve); 

$LAB 
    .script("script1.js") 
    .script("script2.js") 
    .script("script3.js") 

    .wait(function(){ 

     windowLoad.done(function() { 
      // Function 1 
      $("jQuery Function 1"); 
      // Function 2 
      $("jQuery Function 2"); 
     }); 

     $(document).ready(function() { 
      // Function 3 
      $("jQuery Function 3"); 
      // Function 4 
      $("jQuery Function 4"); 
     }); 

    }); 
+0

それは問題ではありません、どのスクリプトローダーを使用していますか? $(window).loadが正しく動作することがあり、時には待機しないことがありますか?私はそれに影響を与えることはできませんか? – ComixZ

+1

@ user1378406 '.load'に直接影響を与えることはできませんが、独自の遅延オブジェクトを導入して、それを仲介してコールバックを行うことができます。私の編集を参照してください。 –

+0

-bigありがとうございます。 window.loadは完全に機能します。しかし、今私はdocument.readyで同じ問題があります。 2回目または3回目にスクリプトの準備よりも早く機能が実行されます。 – ComixZ

関連する問題