在jquery中究竟什么是文档就绪的意思

时间:2012-02-29 18:04:14

标签: jquery document document-ready

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

base.js是这样的:

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

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

var obj = {...};

令人惊讶的是, 有时 (并非所有时间)Firebug在obj.init()来电时向我显示未定义的错误!我的理解是文档就绪意味着所有html元素,包括图像,javascript文件下载和执行(?)。

我相信为了找到这个错误的根本原因,我们需要了解"文件准备好了什么"手段?任何人有任何见解?

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

更新:也许我不应该在这里提到图像,我主要担心的是特别是javascript文件。是否" DOM完全构建"包括"所有执行的javascript代码"?

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

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

3 个答案:

答案 0 :(得分:6)

来自jQuery.ready()的文档:

  

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

     

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

答案 1 :(得分:2)

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

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

在解析文档后发生就绪事件。有些浏览器有一个特定的事件,在其他浏览器中,jQuery使用一个定时器来轮询文档的状态。这意味着事件可以在解析整个文档时发生,也可以稍后发生,具体取决于浏览器。这通常不是问题,因为在解析文档的任何内容之前不会发生

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

答案 2 :(得分:1)

您应该在引用它之前定义obj

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