$(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结构,并且无论页面资源的加载状态如何都会被触发。
如果要等待加载资源,请使用window
的load
事件,该事件仅在页面上的每个元素都已完成加载时触发。
看到:
-
.load
-
.ready