2014-01-09 59 views
3

我試圖動態地將列表項目添加到列表中,然後通過單擊該項目將其刪除。移除事件似乎從未觸發。但是,如果我在靜態列表上使用相同的代碼,它工作正常。我見過類似的解決方案,但他們不工作。用jQuery刪除動態添加的LI列表項目

見的jsfiddle: http://jsfiddle.net/Lc2bC/

<input id="status" type="text" placeholder="Status (tab or enter)"> 

<br/> 
Dynamic List: 
<ul id="statusList"></ul> 


$('#status').keydown(function (e) { 
    if (e.which == 9 || e.which == 13) { 
     $('#statusList').html($('#statusList').html() + formatNewStatus(this.value)); 
     this.value = ""; 
     this.focus(); 
     e.preventDefault(); 
    } 
}); 

$(function() { 
    $('#statusList li').click(function() { 
     alert('dynamicList'); 
     $(this).remove(); 
    }) 
}); 
+0

你必須使用委託與() –

回答

6

這是因爲click()功能只有結合,在它被調用的時候存在的DOM元素。

live()是舊技術,但不推薦使用,在未來的版本中不會受到支持。

你需要使用什麼是on()

$(function() { 
    $('#statusList').on('click', 'li', function() { 
     alert('dynamicList'); 
     $(this).remove(); 
    }); 
}); 
+0

'live()'在當前版本中甚至不支持 - 它在jQuery 1.9中被刪除。爲什麼你甚至會提到它,因爲這個問題從來沒有問過這個問題? – Barmar

+1

所有準確的信息都很有幫助,特別是對於像我這樣的人來說,jQuery的進出。我沒有意識到on()取代了live(),因爲我沒有做很多jquery。我實際上試圖在某個時候使用live()。謝謝(你的)信息。 –

+0

謝謝這個我需要的! – user1781367

2

click的功能僅結合到該存在時,它被稱爲元素。改爲使用on()

上()

附加的事件處理函數的一個或多個事件的選擇的元素。

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

+4

'活()'在棄用jQuery 1.7,在1.9中刪除。你的意思是on()'。 – Barmar

+2

活死了... –

+1

好抓,更新。我仍在使用舊的jQuery代碼庫。更新了答案。 –

2

使用上http://api.jquery.com/on/

$(function() { 
    $('#statusList').on("click", "li", function() { 
     alert('dynamicList'); 
     $(this).remove(); 
    }) 
}); 

FIDDLE

+0

也正確。感謝您使用小提琴。 –

+0

不客氣! – Merlin