Scenario : Drag one or more items and leave them in a different list, but do not remove the items to be dragged from the original list.
To allow multiple drag and drop, I used the code posted by Aaron Blenkush here .
Demo
I made changes according to my needs, for example, to fix the switching problem.
$("ul").on('click', 'li', function (e) {
if (e.ctrlKey || e.metaKey) {
$(this).toggleClass("ui-selected");
$(this).parent().parent().siblings().children('ul').children().removeClass('ui-selected');
}
else if (e.shiftKey) {
var list = $(this).parent();
var first = list.find('.ui-selected').first().index();
var last = $(this).index();
if (first == -1 || last == -1) {
return false;
}
if (last < first) {
firstHolder = first;
first = last;
last = firstHolder;
}
for (i = first; i <= last ; i++) {
list.children().eq(i).addClass("ui-selected");
}
}
else {
$(this).addClass("ui-selected").siblings().removeClass('ui-selected');
$(this).parent().parent().siblings().children('ul').children().removeClass('ui-selected');
}
})
.sortable({
connectWith: "ul",
delay: 150,
revert: 0,
cursor: "move",
disabled: false,
placeholder: 'placeholder',
helper: function (e, item) {
if (!item.hasClass('ui-selected')) {
item.addClass('ui-selected').siblings().removeClass('ui-selected');
}
var elements = item.parent().children('.ui-selected').clone();
item.data('multidrag', elements)
var helper = $('<li/>');
return helper.append(elements);
},
start: function(event, ui) {
var elements = ui.item.data('multidrag');
ui.item.after(elements);
},
stop: function (e, ui) {
var elements = ui.item.data('multidrag');
ui.item.after(elements).remove();
}
});
Problem : Deletes a deleted item from the source list.
. , , , , . Firebug, , style = display: none, , .
,
, , li 1- . 2- ,
cld , , ui-selected.
, -:)