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()每页只触发一次。如果您在等待脚本加载时错过了它,那么您就错过了它。因此,在.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如果您想要与for类似的效果.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 回答