2011-11-30 47 views
0

我有兩個列表,當你點擊第二個名單上的第一個列表中刪除的第一個項目,並添加到第二個列表,但是當我點擊新創建的列表項它不」爲什麼呢? jsFiddle democlick事件不觸發對新創建的列表項

$('#SearchList li a').bind("click", function() { 
    var $this = $(this).unwrap('<a href="#"></a>').remove().text(); 

    var $that = $('#Search li:first').remove().text(); 

    $('<li>' + $this + '</li>').insertBefore('#Search li:first') 

    $('#SearchList').append('<li><a href="#">' + $that + '</a></li>'); 
}); 

<ul id="Search"> 
    <li>Electronics</li> 
    <li>Image</li> 
</ul> 

<ul id="SearchList">       
    <li><a href="#">Interests</a></li> 
    <li><a href="#">Entertainment</a></li> 
    <li><a href="#">Clothing</a></li> 
    <li><a href="#">Pharmacy</a></li> 
    <li><a href="#">Home & Garden</a></li> 
</ul> 

回答

4

.bind()僅影響元素已經在DOM,要使用.delegate().on()(如果你正在使用jQuery 1.7+):

$('#SearchList').on("click", " li a", function() { 
    var $this = $(this).unwrap('<a href="#"></a>').remove().text(); 

    var $that = $('#Search li:first').remove().text(); 

    $('<li>' + $this + '</li>').insertBefore('#Search li:first') 

    $('#SearchList').append('<li><a href="#">' + $that + '</a></li>'); 
}); 

注:.live()從jQuery 1.7開始折舊,所以最好使用.on().delegate()

這裏是(使用jQuery 1.7)上述溶液的的jsfiddle:http://jsfiddle.net/jasper/pgwdv/

有些文檔鏈接:

+0

,這應該因爲我相信.on()是當前的標準。 .live()就是我習慣的,而.live()取代.delegate(),我相信它會取代.bind()...不斷髮展的jquery。 –

+0

@KaiQing'$( '#element_id')。住( '點擊',函數(){...})'基本上是'$(文件).delegate( '#element_id', '點擊',函數() {...});'委託給你指定一個與'document'不同的父對象的能力,所以沒有太多的冒泡,直到'document'開始。 – Jasper

+0

我的代碼是如何將你寫了什麼我做了很簡單的,感謝你這個工作 – ONYX

0

您應該嘗試使用.live而不是.bind。

0

可以使用live功能,以保持點擊(及其他)積極處理動態添加內容。

而不是

$('#SearchList li a').bind("click", function() { 

使用

$('#SearchList li a').live("click", function() { 
相關問題