2011-05-06 37 views
1

我已經制作了一些小插件,這些插件正在應用於例如。一個文本框 像$(「input.txtbox」)。myTextbox();jQuery:用於初始化插件的實時功能

現在我使用ajax動態加載內容,我想知道: 有沒有辦法使用jQuery的實時功能來自動將該插件應用到每個文本框,這將通過AJAX加載?

感謝

回答

2

不能使用.live()但你可以建立一個全球性的ajaxSuccessajaxComplete處理程序。

$.ajaxSuccess(function() 
{ 
    $('input.txtbox').myTextbox(); 
}); 

您可能希望通過不重新初始化已經初始化的輸入插件來提高效率;像

$.ajaxSuccess(function() 
{ 
    $('input.txtbox:not(.myTextbox)').myTextbox().addClass('myTextbox'); 
}); 
2

當DOM結構被修改時,實際上會觸發事件。無論何時創建新文本框並將其插入到文檔中,您都可以響應來綁定您的插件初始化代碼。所討論的事件是DOMNodeInserted(節點被添加到另一個元素的子節點)和DOMNodeInsertedIntoDocument(節點最初被插入到文檔中)。

請注意,這些事件的可用性無法保證/事件不受所有瀏覽器支持。因此,你需要檢查這與你的目標瀏覽器/實現,並可能使用馬特的方法,使其跨瀏覽器工作。

假設你的目標瀏覽器支持的事件,你會做類似的東西:

$(document).live('DOMNodeInserted', function(e){ 
    // Get inserted node from event and initialize your plugin if the element is initially seen 
}); 
+0

jQuery的默認不支持這一點。 http://jsfiddle.net/mattball/4tVAx/它必須是'document.addEventListener('DOMNodeInserted',callback,false);' – 2011-05-07 16:52:02

+1

你是對的。 jQuery目前似乎不支持將此事件與實況綁定。如果使用綁定綁定,則處理程序按預期調用。 查看更新的測試用例http://jsfiddle.net/4tVAx/1/ – 2011-05-07 20:09:13