2012-10-23 31 views
1

我試圖刪除通過輸入文本並單擊鏈接示例中的「添加另一個」鏈接生成的項目之一,但jquery不會從生成的內容中觸發。如果我將事件處理程序附加到另一個對象,該函數會觸發,但不會從生成的鏈接觸發,有什麼方法可以解決這個問題?在下面的代碼中;當用戶點擊類delLink的鏈接時,我想要該鏈接的周圍div以及該div中的所有元素被刪除(擦除)。jquery無法從生成的內容中觸發功能

<div class="regItm"> 
    <input properties...><a class="delLink" properties...>X</a> 
</div> 
<div class="regItm"> 
    <input properties...><a class="delLink" properties...>X</a> 
</div> 
... 
... 

http://jsfiddle.net/KYkJn/2/

+0

解決它的代碼爲nrodic,thx! –

回答

3

試試這個:

$('.delLink').live('click', function(){ 
    alert('ohoy'); 
    $(this).closest('div').remove(); 
}); 

既然你動態地添加項目到DOM,您目前的功能(在頁面加載的狀態)並不適用於他們。

爲了解決這個問題,有live()函數。這可以確保可以處理DOM中當前和未來的選擇器。

+0

不錯..大多數忘記.live()確保動態元素被添加到DOM – Zak

+3

就是這樣。但由於「[從jQuery 1.7開始,.live()方法已被棄用,使用.on()附加事件處理程序。](http://api.jquery.com/live/)」我會推薦'$ (「#basket」)。on(「click」,「.delLink」,function(){' – nrodic

+0

哦,哇,我沒有注意到現有的棄用標籤,將我的舊代碼轉換到on():)。編輯:顯然,[.live()現在只是.on()]的一個別名(http://www.jquery4u.com/jquery-functions/on-vs-live-review/)。 – noko

0

您在執行腳本和您的籃子實際上是空的時刻綁定您的事件。

推薦的方式做這樣的事件與動態內容的結合是使用在()關閉()方法父元素:

$('#basket').on('click', '.delLink', function(e) { 
    alert('ohoy'); 
    $(this).closest('div').remove(); 
    e.preventDefault(); 
    return false; 
}); 
1

http://jsfiddle.net/Cz4Cy/

$('body').on('click', '.delLink', function() { 
    alert('ohoy'); 
    $(this).closest('div').remove(); 
}); 

你對於這種情況,應該使用事件代表。這將允許您爲尚不存在的元素添加事件處理程序。上述

http://api.jquery.com/on/


代碼僅是爲了說明的目的。您應該避免在正文,文檔或窗口中添加委派的事件偵聽器。相反,將它們添加到您的容器中。

+0

我做了,但thx的建議! –