文档就绪在jquery中的确切含义是什么

文档就绪在jquery中的确切含义是什么,jquery,document,document-ready,Jquery,Document,Document Ready,假设我有一个包含javascript文件的HTML页面: base.js如下所示: $(document).ready(function () { obj.init(); } // .............. var obj = {...}; 令人惊讶的是,有时(并非总是)Firebug会在obj.init()调用中向我显示未定义的错误!我的理解是,documentready意味着所有html元素,包括图像、下载和执行的javascript文件(?) 我认为,为了找到这个错误的根

假设我有一个包含javascript文件的HTML页面:

base.js如下所示:

$(document).ready(function () {
   obj.init();
}

// ..............

var obj = {...};
令人惊讶的是,有时(并非总是)Firebug会在
obj.init()
调用中向我显示未定义的错误!我的理解是,documentready意味着所有html元素,包括图像、下载和执行的javascript文件(?)

我认为,为了找到这个错误的根本原因,我们需要理解“文档准备就绪”的确切含义是什么?有人有什么见解吗

============================

更新:也许我不应该在这里提及图像,我主要关心的是javascript文件。“DOM完全构造”是否包括“所有已执行的javascript代码”

============================

再次更新:这里的人似乎同意,在下载并执行所有javascript代码之前,不会触发事件“document.ready”。因此,问题的根本原因仍然未知。在我将$(document).ready块移动到javascript文件底部后,我确实绕过了这个问题。

来自以下文档:


虽然JavaScript提供了
load
事件,用于在呈现页面时执行代码,但在完全接收到所有资产(如图像)之前,不会触发此事件。在大多数情况下,只要完全构建DOM层次结构,就可以运行脚本。传递给
.ready()
的处理程序保证在DOM就绪后执行,因此这通常是附加所有其他事件处理程序并运行其他jQuery代码的最佳位置。当使用依赖CSS样式属性值的脚本时,在引用脚本之前引用外部样式表或嵌入样式元素非常重要

如果代码依赖于加载的资产(例如,如果需要图像的尺寸),则应将代码放在
load
事件的处理程序中。


您应该在引用对象之前定义它


另外,document.ready并不意味着将加载资源,只意味着文档已被解析,因此资源在document ready和
$(window.load
事件之间加载。

加载和解析文档时会发生
ready
事件

这包括所有Javascript文件,但不包括图像

ready事件在解析文档后发生。某些浏览器对此有特定的事件,在其他浏览器中,jQuery使用计时器轮询文档的状态。这意味着事件要么在解析整个文档时发生,要么稍晚发生,具体取决于浏览器。这通常不是问题,因为在解析文档的任何内容之前都不会发生


如果在执行某项操作之前需要加载所有图像,则应使用
load
事件。

ready!==load
“document ready(文档准备就绪)”表示所有图像(包括下载和执行的javascript文件)都是错误的。@Mrtherman是对的,“document ready(文档准备就绪)”取决于浏览器,而不是JQuery。图像不必加载到document上。ready.obj是在document.ready块下定义的,因此这不是问题所在。
$(document)。ready(文档准备就绪)(函数(){obj.init();});var obj={};
将导致无法调用未定义的方法
init
,因为
obj
未在您提供给jQuery的ready方法的函数范围内定义。这不是问题所在吗?请提供真实的代码。从您的代码和报告的错误来看,这听起来像是错误地将document ready作为DOM事件重新定义引用未在scope.var obj中定义的对象是在函数之外定义的,因此它是窗口对象的一部分,这就是为什么我可以在文档中引用它。但是它是在引用它之前定义的吗?不是。在引用它之前引用它,你不会得到未定义的方法,因为在那个时间点上的对象没有定义存在..假设您仍在处理“Firebug在obj.init()调用中向我显示未定义的错误!”是错误…您是否有任何来源支持您在这里所说的内容?例如“这包括所有Javascript文件,但不包括图像。”?如果我理解正确,在这种情况下,您如何解释Firebug将报告“未定义”变量对象出错?+1非常好且详细的答案。这个问题还有另一个答案,也是你发布的,Guffa:。
ready
只是简化了确定DOM准备就绪的时间。“虽然JavaScript提供加载事件,以便在呈现页面时执行代码,但在完全接收到所有资源(如图像)之前,不会触发此事件。”。此处“此事件”指的是“加载”事件,而不是“准备就绪”“事件,我说的对吗?它没有提到外部javascript文件。@user1240869:是的,文档专门回答了您关于“文档就绪”的确切含义以及它与加载所有文件时执行的事件有何不同的问题。
ready
实际上是一个特定于jQuery的事件(如上所述),但是
onload
实际上是内置在JavaScript中的(请参见列表)。jQuery的
ready
非常接近(请参见兼容性列表)。感谢您对“domcontentload”的引用,它回答了我关于图像的问题,在触发document.ready事件处理程序时加载样式表,但同样,它没有回答我关于javascript代码的问题!我的理解是,在下载并执行所有javascript代码之前,DOM不会完全构建!我说得对吗?@user1240869:据我所知,是的。当然,除非因此,基本上,在JavaScript文件停止加载之前(由于它们已经加载或者由于它们的加载被中止),事件不应该被删除