2012-08-03 51 views
0

當我添加一個新的<li>到列表中,然後我嘗試刪除它,它不會讓我從列表中刪除新增功能?jQuery不能刪除li一旦添加

http://jsfiddle.net/43nWM/

乾杯

+0

不是針對你的問題的代碼,但請注意,我正在使用Chrome,所以我可以告訴你:'未捕獲的類型錯誤:對象[對象對象]沒有方法'可排序' – 2012-08-03 11:21:12

回答

0

因爲當瀏覽器閱讀你的JavaScript代碼動態添加的李不在DOM,所以它不能找到它。相反,處理程序添加到父,並聽取這樣的一個:

$('#cblist').on('click', 'a', function(){ 
    $(this).parent('li').remove(); 
    return false; 
}); 

小提琴: http://jsfiddle.net/43nWM/3/

+0

我有一種方法可以有一個鏈接說「全部刪除」,然後警報出現與你確定嗎?是/取消。那麼爲了刪除左邊列表中的所有li? – Paul 2012-08-03 12:17:03

0

您的點擊事件綁定只是現在的「刪除」鏈接,而不是未來的。使用事件代表團來解決這個問題。更改:

$('#cblist a').click(function(){ 

$('#cblist').on('click', 'a', function() { 
0

這裏的祕密是事件委託。當您撥打.click(function() {...}).on('click', function() {...})時,事件處理程序僅分配給與代碼運行時選擇器匹配的元素。它不會影響稍後添加的元素。但是,您可以使用事件委託將事件處理程序分配給靜態元素,該靜態元素將包含所有動態元素,只要匹配動態選擇器的元素觸發該類型的事件,該動態元素就會運行回調函數:

$('#cblist').on('click', 'a', function() { 
    $(this).parent('li').remove(); 
    return false; 
}); 

請查看的部分關於.on()函數的文檔中的直接和委託事件以獲取更多信息。

0
$(function(){ 
    $('#cblist').on('click','a',function(){ 
     $(this).parent('li').remove(); 
     return false; 
    }); 
}); 

查看此jsfiddle

+0

讓javascript監聽每一次點擊,然後在整個DOM中搜索'#cblist a'並不是一個好主意。但是,它會工作。 – ninja 2012-08-03 11:22:13

+0

哦,是啊..我知道..我會編輯我的答案 – 2012-08-03 11:23:37

0

另一種選擇是使用on()函數,如下所示:http://jsfiddle.net/43nWM/12/

說實話,其實我喜歡這裏的其他兩種解決方案雖然。

編輯:用()代替。我原先建議用live()

+0

'.live()'函數已被棄用**月**,所以沒有人應該編寫使用它的新代碼。 – 2012-08-03 11:22:38

+0

live函數不應該使用..因爲它已被棄用,它不是很好的性能明智的原因 – 2012-08-03 11:25:00

+1

@ParvSharma在實踐中,調用'$('selector')。live('event',function(){.. 。})在jQuery 1.7+中會調用'$(document).on('event','selector',function(){...})'。不使用棄用函數的主要原因是它們理論上可以從未來的版本中刪除,破壞你的代碼。 – 2012-08-03 11:27:00

2

你可以試試。

http://jsfiddle.net/43nWM/1/

$(function(){ 
     $('#cblist a').live('click', function(){ 
     $(this).parent('li').remove(); 
     return false; 
     }); 
    }); 
+0

活功能不應該使用 – 2012-08-03 11:25:18

+0

.live()方法已棄用,您可以在jQuery文檔中看到 – 2012-08-03 11:25:47

0

應將此代碼添加到除動態li標籤

$li = $('<li>'+name+'</li>'); 
$a = $('<a href="">remove</a>'); 
     $a.click(function(){ 
      $(this).parent('li').remove(); 
      return false;  
     }); 
$li.append($a); 

我也更新上的jsfiddle