What's the difference between $(document).ready() and just omit it?
在大多数教程中,有两种方法介绍了如何执行jquery脚本:
- 带
window.onload 钩。 - 与
$(document).ready(function(){...}) 事件(并可缩写为$(function(){...}) 事件)
我发现,即使我省略了所有的代码,只要将代码放在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <html> <script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"> <body> <button id="btn" name="test" value="clickme">clickme</button> </body> //$(document).ready( function(){ // $('#btn').on("click", function(e){ // alert("hi") // } //)}) $('#btn').on('click', function(e){ alert('hi') }) </html> |
如您所见,未注释代码(省略了所有
所以我的问题是,在这种情况下(绑定事件),因为我可以像未注释的代码片段那样编写更优雅的代码。为什么我要像大多数教程所说的那样编写代码(这是上面的注释样式)?
HTML中没有
在控制此执行时间时,至少有五个选项可用于执行启动脚本:
您可以将脚本放在
您可以在
您可以在任何需要的地方插入脚本(包括在
您可以在任何需要的地方插入脚本(包括在
您可以在脚本标记上使用
因此,如果您小心地将脚本标记放在正确的位置,或者您的启动脚本不尝试访问DOM元素,则不需要使用
但是,如果您不完全控制脚本的放置位置,并且需要访问DOM元素,或者您希望脚本能够放置在任何位置,并且仍然可以执行正确的操作,或者如果您只希望将所有脚本放在
嗯,这两个不完全一样。当对dom进行自上而下的分析时,内联javascript会立即执行。但是,您提到的钩子是在加载/准备好DOM之后执行的。所以,是的,除了组织之外,如果您确定JS只依赖于内联之前加载的DOM部分,那么您就可以了。否则你肯定需要钩子。
回答你的问题,你没有发现添加和省略
- 您的代码是从上到下解析的。
- 当它到达脚本时,DOM已经准备好了。因此,
$(document).ready 将开火。 - 但是由于脚本在底部,所以您可以确定DOM已经准备好了。在这种情况下,
$(document).ready 没有区别。
要查看区别,请将脚本标记移动到顶部的
关于
所有东西装好后,都会发射
另一方面,加载dom后将激发
根据jquery文档:
.ready( handler )
Description: Specify a function to execute when the DOM is fully loaded.