2013-11-23 124 views
-1

我有兩個UL標籤 here is jsbin link的jQuery的append()元素點擊事件

和我的劇本是

$("#to-do li").click(function(){ 
    alert("I'm to-do li"); 
    $(this).appendTo("#done"); 
}); 

$("#done li").on('click', function(){ 
    // this event is not fired 
    alert("I'm done li"); 
    $(this).appendTo("#to-do"); 
}); 

和要求是對的「待辦事項麗」點擊,就應該追加到「完成李「,反之亦然。

第一個功能正常工作正常。但第二個並沒有被解僱。 點擊「#done li」,再次調用第一個函數。 請幫忙..

1)爲什麼(「#to-do li」)事件在點擊$(「#done li」)時觸發。 2)如何實現這一目標

+0

通常,使用事件代理,所以看到阿倫的回答。一些閱讀:http://jqfundamentals.com/chapter/events –

+0

爲什麼負面的標記?這個問題有什麼不對? – Chandu

+0

我覺得因爲這個問題每週要問百次 –

回答

4

既然你是在處理動態元素的結構,你需要利用事件代表團

$('#to-do').on('click', "li", function() { 
    console.log("I'm to-do li"); 
    $(this).appendTo("#done"); 
}); 

$('#done').on('click', "li", function() { 
    // this event is not fired 
    console.log("I'm done li"); 
    $(this).appendTo("#to-do"); 
}); 

演示的:Fiddle

+0

+1嘿arun謝謝,它的工作。但是我的腳本有什麼問題?意味着爲什麼我們需要用$(文檔)去? – Chandu

+3

這是因爲您最初基於該項目所在的'ul'來附加事件。因此,當'li'移動時,附加到它的事件仍然與之前的'li'有關。這個方法意味着附加事件是基於包含'ul'的。 –

+1

@ArunPJohny爲了獲得更好的性能,我將選擇器改爲'$('#to-do')。on('click','li',fn)' –

相關問題