2

スクリプトの並列ロードに lab.js 2.0.3 を使用しています。問題は、10 回のうちの 1 回で、「$(window).load」部分の起動が早すぎることです。「$(document).ready」の部分は正常に動作します。

例:

<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>

私は何か間違ったことをしていると思いますが、何がわかりません:(

4

1 に答える 1

4

これは、$(window).load()ページごとに 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);
});

と同様の効果が必要な場合.readyは、遅延オブジェクト.loadを使用して、実際のイベントとコールバックの間を仲介できます: 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");
        });

    });
于 2012-05-06T18:45:43.763 に答える