2014-03-25 14 views
1
$(document).ready(function() { 
    $('#userID option').dblclick(function() { 
     return !$('#userID option:selected').remove().appendTo('#removeList'); 
    }); 

    $('#removeList option').dblclick(function() { 
     return !$('#removeList option:selected').remove().appendTo('#userID'); 
    }); 
}); 

此方法有效,但轉移到另一個列表的物品不能轉回,但另一個物品列表中的其他物品可以轉回。jQuery不適用於已處理的物品

回答

3

代表事件的容器,使他們不是靜態元素本身鏈接..

$(document).ready(function() { 
    $('#userID').on('dblclick','option', function() { 
     return !$(this).remove().appendTo('#removeList'); 
    }); 

    $('#removeList').on('dblclick','option',function() { 
     return !$(this).remove().appendTo('#userID'); 
    }); 
}); 

我改變了內選擇到this。但如果你是在一旦你移動多個項目應該用你原有的

你也不必remove()他們先,只需將它們附加到其他的名單,將從目前的一個,即刪除它們。$(this).appendTo('#removeList')

演示在http://jsfiddle.net/HAcv5/

1

的問題是,因爲使用的是remove,其與連接到它的任何事件處理程序沿着刪除從DOM元素。嘗試使用detach代替:

$('#userID option').dblclick(function() { 
    return !$('#userID option:selected').detach().appendTo('#removeList'); 
}); 

$('#removeList option').dblclick(function() { 
    return !$('#removeList option:selected').detach().appendTo('#userID'); 
}); 
0

當您使用$('#userID option')綁定事件,你是他們結合這些具體的選項 - 讓被轉移到#removeList選項仍然有'appendTo(「#removeList ')行動附加到它。該事件仍然有效,只是將該項目追加到已經列出的列表中。

不是將事件附加到列表中的每個單獨項目,而是希望將事件附加到列表本身;這樣,他們將繼續即使在列表內容更改工作:

$('#userID').on('dblclick','option', function() { 
    $(this).appendTo('#removeList'); 
}; 

(這是沒有必要刪除()或其他地方追加之前分離()選項節點;重排根節點隱式地從中刪除原始位置)。