【问题标题】:jQuery events .load(), .ready(), .unload()jQuery 事件 .load()、.ready()、.unload()
【发布时间】:2010-04-21 13:03:44
【问题描述】:

对于 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 新手,谁能解释一下?

【问题讨论】:

    标签: javascript jquery events dom


    【解决方案1】:

    注意:.load() & .unload() 已经是deprecated


    $(window).load();
    

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

    $(document).ready();
    

    另一方面,一旦网络浏览器能够运行您的 JavaScript,就会触发,这发生在解析器处理完 DOM 之后。如果您想尽快执行 JavaScript,这很有用。

    $(window).unload();
    

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

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

    【讨论】:

    • $(document).ready() 实际上会在 DOM 完全加载后立即触发,因此您绝对可以在处理程序中处理所有 DOM。如果您想尽快执行 JavaScript,请将其放在标题中的 script 标记中,在任何事件处理程序之外。它会在加载和解析后立即执行,这可能早于$(document).ready()fires。
    【解决方案2】:

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

    document ready 等待文档初始化。

    卸载好,等文件卸载完毕。

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

    始终使用准备好的文档,除非您需要等待图片加载。

    文档就绪的简写:

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

    【讨论】:

    • 他对订单感到困惑,ready 应该在load 之前被解雇,但事实并非如此。他不是在问你在说什么。
    • @Sarfraz...什么?他在帖子中明确指出“ready() 在 initializeCode() 之前执行 [d];”
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        • 1970-01-01
        • 2012-06-16
        • 2010-11-21
        相关资源
        最近更新 更多