gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 18:28:45 26 4
gpt4 key购买 nike

我使用 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>

我想,我做错了什么,但不知道是什么:(

最佳答案

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

$(document).ready() 另一方面,与 Deferred Objects 相似,新的回调可以在事件触发后添加,并且仍将被调用。

您可以在此处看到此演示: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的效果,你可以使用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");
});

});

关于javascript - 带有 $(window).load(function() 的 Lab.js 和 jQuery 过早启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10473044/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com