2009-06-25 32 views

回答

8

您的jQuery选择器将随机地错过任何元素,因为它尚未加载(通过浏览器)。

-1

当脚本从浏览器到浏览器,页面到页面运行时,这将是不可预知的。

+0

因此,如果我不关心它何时运行,它就是完全合法?我希望它会比包装在$(document).ready()中的版本更早运行。 – Larsenal 2009-06-25 17:56:56

+4

如果它不涉及DOM,那么我确定可以在ready()之前运行。 – 2009-06-25 17:58:04

3

$(document).ready()是jQuery确保您希望在页面加载上运行的代码在浏览器中同时运行的方式。

它还提供了一种机制来堆叠不同的函数以在页面加载上运行。如果您不使用它并且您有多个onLoad分配,则只会添加最后一个实际运行的分配。

+4

$(document).ready()实际上在onLoad事件触发前运行,通常 - 它在DOM加载后立即运行,而onLoad也等待所有图像等在它下载之前下载。 – 2009-06-25 19:13:29

1

当您在DOM中选择元素时,它们有时会工作,并且它们有时不起作用。

这只取决于他们是否已加载。

但是,如果您在文档的最末尾处插入脚本,它通常会没问题。 (从那时起,它应该已经加载了所有的东西)。

2

这是学习jQuery的第一件事:如果您希望事件在您的页面上工作,您应该在$(document).ready()函数内调用它。一旦DOM被加载并且在加载页面内容之前,它内部的所有东西都会加载。

$(document).ready(function() { 
    // put all your jQuery goodness in here. 
}); 

$(document).ready()函数比其他获取事件的方法有很多优点。首先,您不必在HTML中添加任何“行为”标记。你可以将你所有的JavaScript/jQuery分离到一个单独的文件中,它更易于维护,并且可以避开内容。当我将鼠标悬停在链接上时,我从未喜欢在状态栏中看到所有这些“javascript:void()”消息。当您将事件直接附加到标签内时会发生这种情况。

在使用传统JavaScript的某些页面上,您会在标签中看到“onload”属性。问题在于它仅限于一个功能。哦,是的,它再次为内容添加了“行为”标记。 Jeremy Keith的出色书籍DOM Scripting向我展示了如何为单独的JavaScript文件创建addLoadEvent函数,以允许在其中加载多个函数。但它需要一些相当简单的代码。另外,它在窗口加载时触发这些事件,这导致了$(document).ready()的另一个优点。使用$(document).ready(),你可以让你的事件加载或启动,或者在窗口加载前让你想要它们做的任何事情。只要DOM被浏览器注册,就可以尽早将其粘贴在括号内的所有内容都准备就绪,可以在用户第一次看到页面元素时立即隐藏并显示效果和其他内容。

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

1

Bassicly使用这个基本规则:

如果你的代码涉及到DOM包装你的代码在$(文件)。就绪()。如果它不涉及DOM,那么不要将它包装在$(document)中。ready()

0

如果未包装它,它只是普通的旧JavaScript,做你想做的事情,但会加载jQuery库,很难说。

1

有使用

$(document).ready (function()) // or $(function()) 

1主要有两个原因)它确保内的代码只运行一次的DOM完全加载(这不包括加载图像,Flash或其他资源,只是从HTML构建的DOM)。这意味着您可以将JavaScript放在HTML中的任何位置,而不是放在底部(使用香草JavaScript是唯一可以保证它可以在整个DOM上工作而不是在当前加载的位置)。除非你使用window.onload事件,这也保证了这一点,但只能使用一次。这使我想到了第二点;

2)它允许您在页面加载时触发多个函数,而不是使用使用香草javascript时使用的window.onload。这很好,因为它意味着你不必(a)编写你自己的函数来照顾它,b)担心检查是否已经有来自另一个库的onload函数,c)花费几年的时间去调试只是发现你的window.onload被别人的代码覆盖了。

加分:3)它看起来很酷,不是吗? :P

其他说明:如果您没有使用或操作DOM,那么您的代码不需要进入$(document).ready()函数内部。

把你的javascript文件放在html的底部,就在< /正文>之前,它会增加加载的速度 - 实际上速度并不快,但浏览器会在HTML之后加载JS,因此可以启动在JS加载时呈现HTML。这又意味着用户的屏幕上会出现比<头>中的脚本早一秒的事件 - 并且在网络中,分割秒数:)

相关问题