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(){ ... } );