2016-06-09 50 views
-2

我剛剛花了不少時間試圖找出爲什麼一個簡單的函數不會在調試器中激活。最終我把它放在document.ready中,它工作。但是在其他頁面上,類似的功能在文檔準備就緒之外工作。任何人都可以想到這種情況發生的原因嗎?爲什麼這個函數需要在document.ready中?

簡單的功能:

$('#chk').change(function() { 

.... 
} 

在頁面上:

<input type="checkbox" id="chk" /> 
+3

你知道一般document.ready是什麼以及爲什麼使用它? – JJJ

+0

這取決於多少JavaScript代碼必須在頁面上實現。 –

+0

認爲它是頁面的初始化。你有html元素,當頁面準備就緒時,需要將som函數與它們關聯起來。順便說一句,這不是你所指的功能,它是一個事件監聽器。但是你可以在事件監聽器外部有一個函數,比如函數Test(),然後.change事件kan調用該函數。 –

回答

3

$(document).ready火上DOMContentLoaded,這意味着整個HTML源代碼已被處理,並且要確保,如果你ommit,你可以訪問你的輸入

,並把你的腳本<input id="chk">在此之前它不會因爲工作在腳本執行的時候它沒有找到你的輸入

+2

「不太可能」 - >「不會」 - 要自信:) –

+0

好的我明白了,但我怎麼知道一個html元素是否會在事件偵聽器之前或之後加載?例如在另一個頁面上,完全相同的功能在document.ready之外工作。 – BMills

+0

@Bmills可能'script'標籤包含在'input'元素之後;另一個可能的原因可能是您的腳本標記 – pwolaq

-2

它是一個非常大的頁面?在瀏覽器完成構建DOM之前,JavaScript可能會開始運行。將代碼放入文檔中意味着在DOM完成100%之前代碼不會被調用。

+5

頁面大小與它無關 - 完全取決於事物所在的位置。 –

相關問題