$(document).ready究竟保证了什么?

在Google的Chrome浏览器中运行我的(相当复杂的)JavaScript / jQuery应用程序,看起来$(document).ready会在某些JavaScript文件尚未加载时触发。

相关代码(简化):

在我的HTML文件中

 var httpRoot='../../../';var verifyLoad = {};      ...  

作为除main.js之外的每个.js文件的最后一个语句:

 verifyLoad.FOO = true; // where FOO is a property specific to the file 

例如

 verifyLoad.jquerySupplements = true; verifyLoad.serialize = true; 

在main.js中:

 $(document).ready(function() { function verifyLoadTest (scriptFileName, token) { if (!verifyLoad.hasOwnProperty(token)) { console.log(scriptFileName + ' not properly loaded'); }; }; verifyLoadTest('globalvars.js', 'globalvars'); verifyLoadTest('storagekeys.js', 'storagekeys'); verifyLoadTest('geometry.js', 'geometry'); verifyLoadTest('md5.js', 'geometry'); verifyLoadTest('serialize.js', 'serialize'); ... } 

令我惊讶的是,我看到其中一些触发器。 这与我对$(document).ready理解不符。 我错过了什么?

当浏览器从头到尾解析HTML文件并将其转换为DOM结构时,将触发文档的ready事件。 它不以任何方式保证任何其他资源(例如样式表,图像或在本例中为脚本)将被加载。 它仅引用DOM结构,并且无论页面资源的加载状态如何都会被触发。

如果要等待加载资源,请使用windowload事件,该事件仅在页面上的每个元素都已完成加载时触发。

看到:

  • .load
  • .ready