2012-04-24 72 views
2

我一直在使用javascript开发几个月,并且在所有脚本开始时我一直使用$(document).ready(function(){。我注意到其他人不会在他们的脚本中使用它,但如果没有它,我似乎无法得到我的工作。我想保持我的代码更清洁,但对于我所有的谷歌搜索,我似乎无法弄清楚如何摆脱它。

我知道它告诉浏览器在页面加载后立即执行我的脚本,但是我可以设置全局的东西,这样我就不需要明确告诉浏览器在页面加载时执行每个脚本?或者,它是脚本所在的html文件中更多的全局性问题?

+3

坚持脚本标记权之前'',你不应该需要 – 2012-04-24 21:12:16

+0

文件准备就绪可以使用简写'$(函数(){''而不是。 – j08691 2012-04-24 21:14:46

回答

7

您需要document.ready可能是因为您在加载之前正在与DOM进行交互。脚本如何操作那些还没有的元素?

如果您将脚本粘贴到文件末尾,则不需要它。对于大量的Javascript文件这样做也是一个很好的做法,因为它们可能需要一定的时间来处理(特别是如果它们是在外部托管的话)。把它们放在文件的末尾通常为speeds up the page load time

+1

将JavaScript放在最后的做法 - 哪些*可靠地在所有浏览器中工作? *我知道 - 在技术上*不*保证。然而,在这一点上,因为浏览器会自杀而不是以这种方式工作,这归结于理论美德的争论,而不是[必然]实际应用... – 2012-04-24 21:37:17

+0

@pst这是一些[副作用](http://stackoverflow.com/questions/8717401/is-onload-necessary-when-javascript-is-at-the-bottom),即使存在即使在更新的浏览器上也是如此 – ajax333221 2012-04-24 21:52:30

+0

@ ajax333221那个答案有......缺少的答复。'

6

全部$(document).ready(function() { ... });$(function() { ... });确实在等待文档准备好进行操作。如果您的脚本内联或在<head />部分中,则应该使用$(document).ready(function() { ... });$(function() { ... });,否则JavaScript按其在页面上的显示顺序执行。

废除$(document).ready(function() { ... });$(function() { ... });,只需将您的脚本到页面底部后,您所有的内容,收盘</body> tag之前。

无论如何,将脚本放在底部实际上是最佳实践。对于这个和其他最佳实践,我建议你看看Html5BoilerplateYahoo! Best Practices

+0

'......在所有内容加载完成后...... ..这并非严格意义上的,Document.Ready只要DOM被浏览器注册就会触发,并不意味着所有你的内容是被加载的,通常情况下,当document.ready激活时,图像还没有被加载 – Nope 2012-04-24 21:32:38

+0

另一个好的做法是不要在你的html中有任何脚本,而是引用一个包含你的页面脚本的脚本文件。使用不显眼的脚本会导致更清晰的Html。 – Nope 2012-04-24 21:37:32

+0

@FrançoisWahl - 对,没错,我会编辑。就1脚本文件而言,这也是如此,并在我提到的链接中进行了讨论。即使如此,您仍然可以使用大约2或3个从CDN(modernizr.js,jquery.js,jquery-ui.js)提取的外部脚本文件,然后在本地2个脚本文件(plugins.js和script.js)。无论如何,我就是这么做的。 – 2012-04-24 21:50:31

1

$(document).ready()约定是jQuery的一部分,不仅仅是JavaScript。从他们的” documentation on the ready function

这是了解jQuery的第一件事:如果你想要一个事件,您的网页上工作,你应该把它叫做$(文件)。就绪()函数中。一旦DOM被加载并且在加载页面内容之前,它内部的所有东西都会加载。

所以是的,它是必需的。 jQuery的不来与这个简写的,所以你可以做到以下几点:

$(function() { 
    //jquery code 
}; 
+0

“不仅仅是JavaScript”?你什么意思? – 2012-04-24 21:22:54

+0

@FlorianMargaine - $(document).ready()'函数是由jQuery提供的,而jQuery本身是用JavaScript实现的,你显然不能在不包含jQuery库的网页上使用jQuery特性。没有jQuery的最简单的等价物可以在所有浏览器中使用,它是一个普通的'onload'事件处理程序。 – nnnnnn 2012-04-24 21:45:45

+0

是的,我知道,但@ GSto的句子使它看起来像“不仅仅是javascript”,这就是为什么我仍然犹豫是否应该downvote:p – 2012-04-24 21:55:32

相关问题