2013-06-04 38 views
2

我們最近有一個錯誤,jquery document.ready似乎在DOM加載之前被觸發。原來,有第一個項目後,一些錯誤的代碼,這是調用

$.ready(function(){});

看起來這聲明是燒製的document.ready事件。

下面是代碼樣本:

<script> 
    $(function(){ 
     alert("loaded"); 
    }); 
</script> 
<ul> 
    <li> hello </li> 
    <script> 
     $.ready(function(){ 
    }); 
    </script> 
    <li> worldddd</li> 
</ul> 

這裏是一個的jsfiddle在這裏你可以看到DOM警報獲取的執行時,還沒有完全加載。

http://jsfiddle.net/Kq78e/

我的問題是爲什麼$。就緒()觸發DOM準備的事件?這是一個jQuery的「功能」,它允許你強制dom.ready事件觸發?

+5

是的。 https://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L397這是一種內部方法,不應該在jQuery核心之外使用,除非你知道它的作用,爲什麼它做到這一點,並有充分的理由使用它。但是,是的,它只是告訴jQuery DOM已經準備就緒。這是應用於DOMContentLoaded事件的處理程序。 –

+0

如果我沒有弄錯,JQuery文檔頁面也不鼓勵使用:http://api.jquery.com/ready/ –

+0

它不鼓勵使用'$()。ready','$ .ready '從未被提及。我猜想它公開可用的唯一原因是,如果需要它可以被覆蓋。 –

回答

2

它觸發事件,因爲它是事件的處理程序。 http://github.com/jquery/jquery/blob/1.9-stable/src/core.js#L397

這是一種內部方法,不應該在jQuery核心之外使用,除非您知道它做了什麼,爲什麼它這樣做,並且有充分的理由使用它。

它只是告訴jQuery DOM已準備就緒。這是應用於DOMContentLoaded事件的處理程序。正如你所注意到的,自己調用它可能會導致事件發生得太快。只要目標對象是準備

$(document).ready(function(){ 

}); 
+0

是的,一切意味着它應該是。這只是「錯誤」帶來了意想不到的後果。謝謝。 –

1

.ready()運行:最有可能在你的代碼中使用的意思是這個代替。 (記住,$是一個對象,並且可以被選擇。)

當指定$.ready(),你告訴代碼儘快jQuery的運行($)加載(相對於$(document).ready(),運行當文檔加載),這就是爲什麼它在你的DOM加載之前運行。

$.ready()相當於$(document).on('ready', $, handler)

查看.ready() documentation

+0

@亨德森 - 謝謝,這很有趣。 –

相關問題