jQuery(document.ready)多久才能调用?

jQuery(document.ready)多久才能调用?,jquery,Jquery,如果第三方javascript文件挂起并需要一段时间才能加载,则 jQuery(document).ready(function() {}) 在调用之前必须等待加载吗 我认为$(document).ready()在加载和呈现html文档时运行。 阅读文档了解更多信息 是的,它必须等待。 特别是,您不能依赖于jQuery(document).ready()在其他脚本有机会执行之前启动。 ready绑定到DOMContentReady、readystatechanged或onload,以可用的为

如果第三方javascript文件挂起并需要一段时间才能加载,则

jQuery(document).ready(function() {}) 
在调用之前必须等待加载吗

我认为$(document).ready()在加载和呈现html文档时运行。 阅读文档了解更多信息

是的,它必须等待。 特别是,您不能依赖于
jQuery(document).ready()
在其他脚本有机会执行之前启动。
ready
绑定到DOMContentReady、readystatechanged或onload,以可用的为准

文档指出,“在大多数情况下,只要DOM层次结构完全构建好,脚本就可以运行”。请注意,唯一的保证是在触发此事件时DOM已准备就绪。 它不能向你保证任何其他东西——因为它就是不能

例如,这在IE、Firefox或Chromium中不起作用,无论您如何洗牌脚本标记,
ready()
处理程序有机会执行之前,brilliant.js始终被调用:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>Test</title>
    <script src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.2.js" charset="utf-8" type="text/javascript" ></script>
</head>
<body>
    <script type="text/javascript" >
    // <![CDATA[
        alert("attaching event");
        $(document).ready(function () { alert("fired"); });
    // ]]> 
    </script>
    <script type="text/javascript" src="brilliant.js" ></script>
</body>
</html>

第三方js文件可能被阻塞,特别是如果它位于head标记中。试着把它放在
结束标记之前

我认为第一个答案是错误的-document.ready并不意味着必须加载所有内容,它意味着dom已经完成。否则,在这个框架内运行的jquery方法在加载所有图像(例如)之前不会运行,这是不正确的

编辑

看起来脚本的行为有所不同,但可以是特定于浏览器的。这里有一个很好的解释:


根据Mozilla关于“DOMContentLoaded”事件的文档,“ready”和“load”之间的关键区别在于页面在调用“ready”(即在Firefox或Webkit中的“DOMContentLoaded”处理程序)之前不会等待图像加载。没有说明脚本文件正在完成。考虑到我们讨论的是单线程模型,我看不出当浏览器仍在解析/执行它在
结束之前遇到的
块时,如何调用“ready”处理程序。如果测试页面在正文末尾加载了一个缓慢的脚本,那么该脚本总是在jQuery之前完成已调用“ready”处理程序。
ready()
在John Resig决定它应该运行时运行。它可以在不同的浏览器上运行,甚至可以在不同的时间在同一浏览器的不同版本上运行。你不能指望它在其他脚本有机会执行之前启动事件处理程序。你唯一可以确定的是,当它启动时,你可以访问DOM。
bindReady: function() {
    if ( readyBound ) {
        return;
    }

    readyBound = true;

    // Catch cases where $(document).ready() is called after the
    // browser event has already occurred.
    if ( document.readyState === "complete" ) {
        return jQuery.ready();
    }

    // Mozilla, Opera and webkit nightlies currently support this event
    if ( document.addEventListener ) {
        // Use the handy event callback
        document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );

        // A fallback to window.onload, that will always work
        window.addEventListener( "load", jQuery.ready, false );

    // If IE event model is used
    } else if ( document.attachEvent ) {
        // ensure firing before onload,
        // maybe late but safe also for iframes
        document.attachEvent("onreadystatechange", DOMContentLoaded);

        // A fallback to window.onload, that will always work
        window.attachEvent( "onload", jQuery.ready );

        // If IE and not a frame
        // continually check to see if the document is ready
        var toplevel = false;

        try {
            toplevel = window.frameElement == null;
        } catch(e) {}

        if ( document.documentElement.doScroll && toplevel ) {
            doScrollCheck();
        }
    }
},