Javascript 带有$(window.load)(function()的Lab.js和jQuery过早启动

Javascript 带有$(window.load)(function()的Lab.js和jQuery过早启动,javascript,jquery,labjs,Javascript,Jquery,Labjs,我使用lab.js2.0.3并行加载脚本。 问题是,$window.load部分在10次中有1次触发得太早,而$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/

我使用lab.js2.0.3并行加载脚本。 问题是,$window.load部分在10次中有1次触发得太早,而$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>
我猜,我做错了什么,但不知道是什么:

这可能是因为$window.load每页只触发一次。如果在等待加载脚本时错过了它,那么就错过了它。因此,在.wait和.load之间,您有一个比赛条件,无法真正预测您是否会赢或输

另一方面,$document.ready与延迟对象类似,因为新的回调可以在触发事件后添加,并且仍将被调用

您可以在此处看到演示:

如果希望获得与.ready for.load类似的效果,可以使用在实际事件和回调之间进行调解:

这可能是因为$window.load每页只触发一次。如果您在等待加载脚本时错过了它,那么您就错过了它。因此,在.wait和.load之间,您有一个无法预测您是否会赢或输的竞争条件

另一方面,$document.ready与延迟对象类似,因为新的回调可以在触发事件后添加,并且仍将被调用

您可以在此处看到演示:

如果希望获得与.ready for.load类似的效果,可以使用在实际事件和回调之间进行调解:


为什么您需要window.load?您不能将所有内容都放在$document中。准备好了吗?您对“太早”的定义是什么?在脚本[123]之前.js已加载?我不能用$document.ready调用script1。不知道为什么,但它不会工作。脚本开发人员在他的网站上编写了这篇文章。为什么您需要window.load?您不能将所有内容都放在$document.ready中吗?您对“太早”的定义是什么?在脚本[123]之前.js已加载?我不能用$document.ready调用script1。不知道为什么,但它不会工作。脚本开发人员在其网站上编写了此脚本。因此,我使用哪个脚本加载程序并不重要?$window.load有时工作正常,有时不等待?我无法影响它?@user1378406您无法影响。直接加载,但您可以介绍ce您自己的延迟对象来调解它和回调。请参阅我的编辑。-非常感谢。window.load现在可以很好地工作。但是现在我对document.ready也有同样的问题。每第二或第三次函数出现的时间都比脚本准备好的时间早。忽略我的最后一条注释。主要问题已经解决。document.ready也可以正常工作。函数本身有一个错误。谢谢。这不重要,我使用哪个脚本加载程序?$window.load有时工作正常,有时不等待?我不能影响它?@user1378406你不能影响。直接加载,但你可以引入你自己的延迟对象来调解它和回调。请参阅我的编辑。-非常感谢。window.load现在可以工作了很好。但是现在我对document.ready也有同样的问题。每第二次或第三次函数出现的时间都比脚本准备好的时间早。忽略我的最后一条评论。主要问题已经解决。document.ready也可以正常工作。函数本身有一个错误。谢谢
$(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);
});
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");
        });

    });