2015-05-09 93 views
-3

我想在jQuery中觸發一些事件。我的觸發器功能不在document.ready函數中。它不工作。如果我把代碼放在document.ready中,它就起作用了。jQuery中的document.ready函數沒有觸發事件

即使它們不在document.ready函數中,也觸發了一些其他事件。

請讓我清楚爲什麼某些事件只能在document.ready函數內工作的功能。

感謝

+0

哪些事件?哪些觸發器?將您的代碼添加到您的問題。 –

+0

我有一個按鈕點擊事件。當我點擊按鈕時,單擊事件不會觸發 – rsvijay

+0

不可能在沒有看到代碼的情況下判斷代碼有什麼問題。 – JJJ

回答

0

Web瀏覽器執行遇到當這一切立即JS,即使網頁沒有加載完成。在情況中,你應該期望當你的JS執行時,部分或全部DOM仍然不可用,因爲它仍然從服務器上下載。

將事件處理程序附加到元素僅在DOM中存在這些元素時才起作用,因此可以在您嘗試附加它們時選擇它們。因爲選擇器(.some_element_not_yet_loaded)與任何內容都不匹配,所以發出命令$('.some_element_not_yet_loaded').click(function(){alert('Element Clicked')})是無效的。

確保您嘗試附加處理程序的元素存在於DOM中的唯一方法是等待,直到document.ready事件被觸發爲止(直到DOM確實完成加載後纔會觸發此事件並且實際上準備好了)。

你看到不一致的行爲的原因是因爲這是一個經典的競爭條件 - 基於從服務器加載DOM的速度或速度有多快,並由瀏覽器初始化確定哪些元素出現在你的JS執行。在某種程度上,您可以通過將JS移動到頁面底部來進行欺騙,但是因爲DOM從JS的執行異步初始化,所以偶爾會導致問題。因此,最好將所有JS初始化代碼放在document.ready事件中,以完全確保DOM已完全加載並準備就緒。

+0

感謝Robert Lee的精彩演繹 – rsvijay