Javascript 此代码是否需要在document.ready中?
Javascript 此代码是否需要在document.ready中?,javascript,jquery,Javascript,Jquery,document.ready用于在DOM完全加载后执行代码。这可用于将事件处理程序附加到页面上的元素,例如 $(function(){ $('#somediv').click(function(){ }); }) <div id="somediv"> </div> 正如你所看到的,它是。我的理解是,由于此代码没有连接到文档中的任何元素,而是连接到文档本身,因此无需将其包装到document.ready处理程序中。我不包装它的另一个原因是,我
document.ready
用于在DOM完全加载后执行代码。这可用于将事件处理程序附加到页面上的元素,例如
$(function(){
$('#somediv').click(function(){
});
})
<div id="somediv"> </div>
正如你所看到的,它是。我的理解是,由于此代码没有连接到文档中的任何元素,而是连接到文档本身,因此无需将其包装到document.ready
处理程序中。我不包装它的另一个原因是,我以前在香草javascript中也做过同样的事情,等效的代码是下面的代码,它也是
我看过很多帖子,人们把它包装在一个文档中。ready
,不把这个代码包装在文档中有什么坏处吗
另外,我认为这个问题源于我不清楚在构建DOM的过程中会发生什么,所以如果有人能够解释在DOM准备好之前发生了什么。对我来说,当html被解析并转换成DOM树时,文档就准备好了,或者还有更多的内容吗
总之,以下是我的问题
将事件处理程序绑定到文档本身时
必须将该代码放入文档中。准备就绪
不在文档中包装代码是否有任何不利之处。就绪
构建文档时,在触发document.ready
之前,会发生哪些事件序列李>
不将事件绑定到文档.ready
块中的文档的唯一缺点是,可以在加载所有页面内容之前触发事件,这可能不是您想要的。如果您绑定到文档本身,则无需等待它准备就绪。在这种情况下,不将其包装在document.ready中不会有任何缺点
当浏览器触发DOMReady事件时,或者当不支持DOMReady事件的浏览器版本的特定测试成功时,会触发document.ready
附加信息。(5/22/12)
大多数现代浏览器都实现了一个事件,当文档中定义的所有元素都准备好被javascript操纵时,该事件就会触发。其他浏览器要么依赖于setTimeout循环,该循环持续检查文档的readystate,要么直接绑定到文档的onreadystatechanged方法(取自)。在执行javascript之前,文档本身已经准备好进行操作,因此直接绑定到文档时不需要等待
这里唯一的问题是,如果代码与文档以外的元素交互,则有可能在这些元素存在之前在文档上触发事件。这种情况不太可能发生,但也有可能发生。如果您的代码可能出现这种情况,那么将其放在$(document).ready()中以防止出现这种情况是有意义的。您的示例不保证放在$(document.ready()
中$(document.ready
的要点是在解析整个文档后执行代码
只有当您想使用尚不存在的元素时,才需要使用它。
(例如,如果脚本位于
中)
如果您正在使用的元素已经存在(因为它们是全局的,或者因为您的
在它们下面),您就不需要它。在对元素使用操作或调用它们(将在DOM中生成或还不存在)时,您需要使用$(文档).ready
除了答案之外:您只需使用jquery live函数(而不是keydown等)即可摆脱“DOM元素必须完成”的情况
$(document).keydown(function(e){
if (e.which == 39) {
alert( "right arrow pressed" );
return false;
}
});
因此,下一步必须正常工作:
$( "#somediv" ).live( 'keydown', function(){ ... } );
在本例中,jQuery在可能的情况下绑定事件。将所有绑定放在一个(就绪)函数中并不困难,绑定可以放在HTML页面或Javascript文件的独立部分
因此,结果是:不,当您使用上述函数时,不需要将代码放在document.ready中
更新
在jQuery的最新版本中(>=1.7)使用函数,而不是,因为最后一个版本是去润滑的。因此,没有必要将事件绑定放到ready()中
当DOM层次结构已完全恢复时,将触发此事件
已构建,即图像等所有资产已完全
收到
你问:
- 将事件处理程序绑定到文档本身时,是否需要将该代码放入document.ready?
- 回答:不。当使用依赖CSS样式属性值的代码时,在引用代码所在的脚本之前或在
document.ready()
block之前引用外部样式表或嵌入样式元素非常重要
- 不在document.ready中包装代码有什么缺点吗?
- 回答:否。但是当您必须使用JavaScript在文档中创建元素时,应该等待DOM准备就绪。为此,您应该将代码放入
document.ready()
块中
- 构建文档时,在触发document.ready之前,会发生哪些事件序列?
- Answer:在触发document.ready之前,浏览器已触发加载的
DOMContentLoaded
1。将事件处理程序绑定到文档本身时,是否需要将该代码放入文档中。准备好了吗?
不需要。事实上,JQ中绑定的“on”方法可以在文档中进行委托,这样您就可以在任何时候安全地在任何元素上使用这些方法,只要在co中没有太多冒泡被阻止
$( "#somediv" ).live( 'keydown', function(){ ... } );