2013-10-22 20 views
1

我已經閱讀代碼的準備處理程序外使用jQuery,有什麼缺點,如果有任何使用它這種方式?不管出於什麼原因,我都覺得不舒服,用這種方式編碼。jQuery是否應該只在ready事件處理程序中使用?

內嵌腳本和ASP.NET MVC查看:

<script type="text/javascript"> 
    function foo() { 
     if ($("#checkAll").attr("checked")) { 
      $(".setColumns").attr("checked", true); 
     } 
     else { 
      $(".setColumns").attr("checked", false); 
     } 

    } 
</script> 
+4

在DOM就緒處理程序中使用jQuery的原因是事件綁定僅在元素存在時才起作用 - 如果您的DOM未準備好,您的元素可能不存在,因此事件可能不會綁定。你當然可以自由地定義處理函數以外的函數。 – Terry

+0

任何元素操作。不只是事件綁定。元素必須存在才能被操縱。 – user2736012

+1

只要你的'foo'函數被保證在DOMReady被觸發後被調用,你的代碼根本就沒有問題。 –

回答

6

沒有任何缺點。只是需要等待DOM元素被加載才能被操作。舉例來說,如果你有這樣的代碼:

<script type="text/javascript"> 
    console.log($('#el').html()); 
</script> 

<div id="el">Text</div> 

功能不會返回一個值,因爲div尚未加載。

+1

這個概念的很棒的插圖:)你打我們嘿嘿。 – Terry

1

它不是。 爲什麼有些人在document.ready處理程序中運行它的唯一原因是,因爲那時他們可以確定DOM tree已完全加載,並且您的查詢將返回正確的結果。

但是,如果您將腳本標記放在所有元素的下面,通常不會有任何問題。

0

在DOM就緒處理程序中使用jQuery的原因是事件綁定僅在存在元素時才起作用 - 如果您的DOM未準備好,您的元素可能不存在,因此事件可能不會綁定。

這與人們在嘗試將事件綁定到動態加載的內容時沒有使用.on()選擇器時面臨的問題相同 - 例如,如果元素初始不存在,事件將不會綁定到它。

p/s:您當然可以自由定義處理函數以外的函數。

+0

我希望你會在評論中首先發布答案。 –

相關問題