jQuery事件.load()、. ready()、. unload()


71

对于jQuery事件,这只是一个简单的问题。加载DOM时,.load(),.ready()和.unload()是否按顺序运行?当我看到jQuery文档时,答案似乎是肯定的。

<script type="text/javascript">

    $(window).load(function () {
        // run code
        initializeCode();
    });

    $(document).ready(function() {
        //run code that MUST be after initialize
    });

    $(window).unload(function() {
        Cleanup();
    });
</script>

但是,.ready()内部的代码是在initializeCode()之前执行的;被执行,所以我真的很奇怪。现在,我必须将代码放在.onload()方法内,并放在initializeCode()之后;行,这意味着它位于.ready()块中。

当我刚接触jQuery时,有人可以向我解释一下吗?

Answers:


129

注意:.load().unload()已被弃用


$(window).load();

页面及其所有内容加载完成后将执行。这意味着所有图像,CSS(以及CSS定义的内容(如自定义字体和图像),脚本等)均已加载。可以这么说,当您的浏览器的“停止”图标变为灰色时,就会发生此事件。这对于检测何时加载文档及其所有内容非常有用。

$(document).ready();

另一方面,只要网络浏览器能够运行您的JavaScript,就会触发该事件,这是在使用DOM完成解析器之后发生的。如果要尽快执行JavaScript,这将很有用。

$(window).unload();

当您离开页面时,将触发此事件。可能是Refresh / F5,按下上一页按钮,导航到另一个网站或关闭整个选项卡/窗口。

总而言之,ready()将在load()之前被触发,而unload()将是最后一个被触发。


10
$(document).ready()实际上会在DOM完全加载后立即触发,因此您绝对可以在处理程序中处理所有DOM。如果要尽快执行JavaScript,请将其放在script任何事件处理程序之外的标头中的标记中。它将在加载和解析后立即执行,这可能在$(document).ready()火灾发生之前就已经执行了。
西蒙

11

窗口加载将等待所有资源加载。

文档准备就绪,等待文档初始化。

卸载得好,等到文件被卸载。

顺序是:文档准备就绪,窗口加载,…………窗口卸载。

除非您需要等待图像加载,否则请始终使用准备就绪的文档

准备文件的简写:

$(function(){
    // yay!
});

他对命令感到困惑,ready应该先被解雇,load但事实并非如此。他不是在问你在说什么。
Sarfraz

4
@Sarfraz ...什么?他在帖子中明确指出“ ready()在initializeCode()之前执行[d];”
大卫·默多克

6

如果同时使用两个“ document.ready”变体,则它们都会按照出现的顺序触发

$(function(){
    alert('shorthand document.ready');
});

//try changing places
$(document).ready(function(){
    alert('document.ready');
});

0

另外,我注意到.load和.ready之间还有另一个区别。我正在打开子窗口,子窗口打开时我正在执行一些工作。仅当我打开窗口时才调用.load,如果不关闭窗口,则不会再次调用.load。但是,无论是否关闭子窗口,每次都会调用.ready。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.