javascript
  • jquery
  • dom
  • 2011-08-22 76 views 3 likes 
    3

    當使用jQuery文檔就緒時,即$(document).ready(function() { }有沒有可能DOM尚未完全加載呢?DOM未完全加載?

    我正在使用一些3 rd派對工具(Telerik's grid),並設置了一個客戶端模板來顯示一個複選框,就像this一樣。代碼:

    .ClientTemplate("<input type='checkbox' name='checkedRecords' value='<#= OrderID #>' />") 
    

    的原因,我想問的是,我試圖將事件掛鉤到所有複選框監測change

    $(':input').change(
        function() { 
         alert('you fired!'); 
    }); 
    

    我手動把複選框Telerik的電網之外代碼,它掛鉤到複選框更改,但沒有一個複選框內的電網做...

    而在那種情況下 - 是否有工作?

    +1

    過去曾與Telerik合作過,看起來他們在頁面加載後添加了DOM元素,所以'.live()'應該可以正常工作。 –

    回答

    4

    有沒有機會HTML頁面中靜態定義的DOM尚未在$(document).ready()加載。但是,如果您使用的是動態加載或創建HTML的第三方庫,則不能保證該庫在$(document).ready()時已完成業務。事實上,這很可能沒有。

    你有幾個選擇:

    1. ,可以看到被第三方庫後觸發創造它的HTML,從而複選框現在存在,然後使用場景下的傳統jQuery的掛鉤到他們的事件。
    2. 您可以使用jQuery中的.live()功能捕獲甚至DOM對象的事件,這些事件在您指定要連接它們時尚未存在。你可以在這裏閱讀.live()http://api.jquery.com/live/。它的工作原理與普通的事件處理程序相似,只是它僅適用於某些事件,並且在如何停止傳播方面存在一些差異。
    8

    嘗試用活,

    $(':input').live('change', function() { 
           alert('you fired!'); 
          }); 
    

    編輯

    .live()已過時形式的版本1.7,自1.9版本被刪除: 而是現場使用on()

    +1

    以下是爲更好地理解而生活的文檔:http://api.jquery.com/live/ – Rumplin

    +0

    只是要小心,.live()已從1.7版棄用,並從版本1.9開始刪除:[api.jquery.com /live](http://api.jquery.com/live/) – betatester07

    +0

    @ betatester07感謝您的信息。我已經更新了答案。 –

    相關問題