jQuery(document).ready多久会被调用?

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

jQuery(document).ready(function() {}) 

在被叫之前必须等待加载?

是的,它必须等待。 特别是,在其他脚本有机会执行之前,您不能依赖jQuery(document).ready()ready绑定到DOMContentReady,readystatechanged或onload,无论哪个可用。

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

例如,这在IE,Firefox或Chromium中不起作用,无论您如何随机播放脚本标记, 都会ready()处理程序有机会执行之前调用 brilliant.js

    Test        

仅供参考,这是jquery-1.4.2的相关代码:

 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(); } } }, 

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

http://docs.jquery.com/Tutorials:Introducing_$(文件)。就绪()

第三方js文件可能阻塞,特别是如果它在head标签中。 尝试将它放在结束标记之前。

我认为第一个答案是错误的 – document.ready并不意味着必须加载所有内容,这意味着dom已经完成。 否则,在此内部运行的jquery方法将不会运行,直到加载所有图像(例如),这不是真的。

编辑

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

JavaScript:DOM加载事件,执行序列和$(文档).ready()