【问题标题】:How to check if document is ready?如何检查文件是否准备好?
【发布时间】:2010-05-12 14:27:31
【问题描述】:

如何通过jQuery检查文档是否准备好(所有js文件加载,DOM准备好)? 有flag吗?

如果某些文件没有完全下载,并且该事件由用户引发,则将面临问题。我想检查内部事件处理程序。

我正在使用 jQuery,asp.net

【问题讨论】:

  • 这是一般 jQuery 教程中的第一课。比如你读过一本吗?你可以找到一些here。 main tutorial 已经在第 2 章中处理了这个问题。
  • 是的,我知道Ready函数,但是如何检查DOM是否就绪?
  • @Lalit:在 jQuery 中 DOM 是 $(document)。
  • @Colin:这个问题可能有一个赞成票,因为它非常清楚并且提出了一个非常具体的问题,在stackoverflow的其他地方没有被问到......为什么它不应该有一个赞成票......在事实上,我想我会再给它一个。
  • @Colin 不,OP 没有要求 $(document).ready()。他正在询问如何检查准备好的事件是否已经发生。因此,+1 支持。

标签: asp.net jquery


【解决方案1】:

这没有记录,我不认为,但是如果您查看 $(document).ready 的 jQuery 代码:

// If the DOM is already ready
if ( jQuery.isReady ) {
  // Execute the function immediately
  fn.call( document, jQuery );
} // ...

因此,对于可能改变的方式,您可以使用$.isReady 或jQuery.isReady。

更好的方法是直接使用$(document).ready。例如:

function myClickHandler(event) {
  // do stuff

  $(document).ready(function() {
    // Do this immediately if DOM is loaded, or once it's loaded otherwise.
  }
}

本质上,这使用了 ready 函数作为守卫。代替 if 语句,您使用 ready 函数。当然,ready 函数具有在加载 DOM 后将运行的行为。如果您的行为只是希望在加载时发生某些事情,但在尚未加载 DOM 时从不这样做,那么使用上面的标志或设置您自己的标志是更好的方法。自己设置:

$(document).ready(function() {
  window.domIsReady = true;
}

if (window.domIsReady) {
  // do stuff
}

创建您自己的可能会更好,因为 jQuery.isReady 似乎没有记录在案,因此可能不受支持并且可能随时更改。

【讨论】:

  • 在你的最后一个例子中,为什么不只是 // 在 $(document).ready 块中做一些事情?
  • 他特别说他想要一个标志来签入另一个事件处理程序。错误在于将 if (window.domIsReady) 独立放置——呈现的用例将在不同的函数中具有它。抱歉不清楚。
【解决方案2】:
$(document).ready(function() {
  // Handler for .ready() called.
});

【讨论】:

    【解决方案3】:

    这是一个技巧问题吗? :)

    你要找的是document.ready

    例子:

      $(document).ready(function() {
    
       alert ("document is ready!");
    
      });
    

    【讨论】:

    • 伙计们,我知道 Ready 功能。我有另一个按钮的单击事件处理程序,我只想检查所有其他 js 文件是否已加载并且 DOM 是否处于就绪状态。
    • @Lalit 我明白了。我不知道要检查的ready 标志,尽管如果有一个我不会感到惊讶。如果什么都没发生,我会构建一个 $(document).ready() 函数,将标志设置为 true:document_loaded 或其他东西。然后你可以检查那个标志。
    • @gmcalab ready() 是否返回文档的就绪状态?我不确定。
    • @Pekka - 既然你提到了它,我必须仔细检查一下。
    • 谢谢 Pekka,我正在使用基于标志的方法。
    【解决方案4】:

    一个简单的函数调用来查看是否已加载基础。

       jQuery(document).ready(function(){ 
          alert("howdy");  
        }); 
    

    替代,看看是否加载(更好)

    <script type="text/javascript">  
    if (typeof jQuery == 'undefined')  
    {  
        alert('not loaded'); 
    }  
    </script>
    

    对于那里的简短坚果:(不需要 typeof :)

    <script type="text/javascript">  
        if(!this.$) 
        {  
            alert('not loaded'); 
        }  
        </script> 
    

    【讨论】:

      【解决方案5】:

      http://api.jquery.com/ready/ - 页面底部的示例

      【讨论】:

        【解决方案6】:

        Jquery 有这个:

        $(document).ready(function(){ 
            alert('document ready here') 
        }); 
        

        将任何操作 DOM 的 jquery 包装在 $(document).ready() 块中已成为相当普遍的做法,以确保 DOM 在继续之前就在那里。

        【讨论】:

        • 好吧,承认!谁只对我的回答投了反对票?!耻辱! :)
        【解决方案7】:

        我认为你的目标是:

        $(window).load(function(){
           alert("All content has been downloaded to the web browser")  
          }); 
        

        不久前我做了一个blog:

        【讨论】:

          【解决方案8】:

          认为 document.ready 代码仅在加载文档和所有文件时触发。我自己从来没有遇到过问题。

          如果我遇到问题,我会在所有需要的文件中放置一个 var 并检查它们是否相加,然后将所有代码放在一个文件中。

          请原谅我没有给出明确的答案

          【讨论】:

          • 不,在 HTML DOM 加载后立即触发 document.ready。当其他所有内容(例如图像)完成时会触发 onload。
          【解决方案9】:

          您是否正在寻找原生的window.onload 事件?当页面上的所有内容(包括脚本、图像、样式表)都加载完毕时会触发它。

          function doStuff() {
              alert("The DOM and everything inside have loaded");
          }
          window.onload = doStuff; 
          

          另请参阅:addLoadEvent。

          【讨论】:

          • 准备好了!= 加载,见here
          【解决方案10】:

          从jquery 1.8.x .ready() api page 看来,使用以下语法绑定事件处理函数似乎可以解决问题:

          $(document).ready(handler);
          

          'handle' 函数将被调用,即使 'ready' 事件已被触发。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-03-12
            • 1970-01-01
            • 2014-06-30
            • 1970-01-01
            • 1970-01-01
            • 2015-11-18
            • 1970-01-01
            • 2017-07-22
            相关资源
            最近更新 更多