该错误是由于 div.sortable 嵌套在另一个 div.sortable 中的结果,因此当您放入新元素时它会触发两次排序。我想出的解决方法只是计算在特定拖放中添加的元素数量,并将一个名为“deleteMe”的类添加到重复项中。
然后,您只需在排序结束时调用 $(".deleteMe").remove() 即可删除额外内容。
不理想,但似乎对我有用。 http://jsfiddle.net/JUnA7/72/
$(function() {
var dropCount=0;
$(".sortable").sortable({
connectWith: ".sortable",
cursor: 'pointer',
receive: function(event, ui) {
dropCount=dropCount+1;
if(dropCount>1)
$(ui.item).addClass("deleteMe");
console.log(dropCount);
},
start: function(event, ui) {
dropCount=0;
var placeholders=0;
$(".ui-sortable-placeholder").each(function(){
placeholders=placeholders+1;
if(placeholders>1)
$(this).height(0);
});
},
stop: function(event, ui) {
$(".deleteMe").remove();
dropCount=0;
}
});
$(".draggable").draggable({
handle: ".icon-move",
connectToSortable: ".sortable",
appendTo: "body",
helper: 'clone',
distance: 30
});
});
更新
另外,我注意到排序占位符也是重复的..所以我通过将它们的高度设置为 0px 来删除重复项。
start: function(event, ui) {
dropCount=0;
var placeholders=0;
$(".ui-sortable-placeholder").each(function(){
placeholders=placeholders+1;
if(placeholders>1)
$(this).height(0);
});
}