2010-03-17 56 views
5

我有一個這樣的監聽器:jQuery的聽衆不「聽」到DOM元素的事件動態創建

$('.delete').click(function() { 
    ...some stuff 
}); 

此外,在同一頁上,另一個腳本動態元素以這種方式添加到DOM :

$('#list').append('<tr><td><a class="delete" href="#">delete</a></td></tr>'); 

我的問題是,偵聽器不會「偵聽」這些動態創建的元素。

任何人都可以請一些光嗎?

回答

13

它只會偵聽綁定事件處理函數時存在的元素。如果您希望它傾聽動態創建的元素,您想使用live()函數,該函數適用於當前和未來的元素。

編輯:如jQuery的1.7的,推薦的方法是使用.on()功能,其通過提供用於附接的事件處理程序所需的所有功能取代.bind().live().delegate()

+0

輝煌,非常感謝你! – Luca 2010-03-17 15:42:38

+1

謝謝。在我的情況下,我不得不將事件添加到我的文檔元素,如下所示:'$(document).on('click','。mybutton',function(){// handler});'' – gerrytan 2013-08-28 06:54:53

0

當然。

動態監聽器不是動態的。

$('.delete').click(function() { 

將監聽器連接到所有現有元素。

當您添加另一個元素時,您需要重新運行以確保新元素獲得相同的處理程序。

基本上,新的元素不得到傾聽,因爲你不附加新的處理程序給他們;)

1

是的,檢查出的JQuery直播功能。 還記得綁定和解除綁定事件。在每次創建鏈接時都會遇到問題,但由於該頁面沒有重新加載,鏈接將有5或6個點擊事件與之相關聯,並且導致問題。只是不得不將事件解除鏈接。

3

將事件綁定到尚不存在的元素是不可能的。正如明智地表示的酸奶一樣,您可以使用「開啓」並指定您希望用作該功能的第二個參數的選擇器。

this.$someStaticParent.on('click', 'li', functionName); 

這是幹什麼的,是告訴父元素保存點擊事件。無論何時點擊它,它都會檢查該事件是從哪裏來的,如果它匹配參數二,它將觸發一個事件。這被稱爲事件代表團。您允許父母接受事件,然後在成功比較後觸發事件。這是一種常見的設計模式。