9

现在我有一列元素,我把它拖到了我拖动的位置,它会克隆,但是当我放下时,它也会删除原始元素。

$( ".column" ).sortable({
        helper: 'clone',
        connectWith: ".column",
        connectWith: ".grid",
        start: function(e, ui){
            ui.placeholder.height(ui.item.height());
             $(".column" ).find('.portlet:hidden').show()
             console.log('started')
        },
        stop: function(event, ui) {
            $(ui.helper).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone').appendTo('body');
        }
    });

如何将原件保留在其所在的位置(无需将其重新附加到列中)并使克隆移动到所需的位置?

4

2 回答 2

13

在停止事件处理程序中使用$(this).sortable('cancel')以将项目恢复到其原始列表/位置。http://api.jqueryui.com/sortable/#method-cancel

$( ".column" ).sortable({
        helper: 'clone',
        connectWith: ".column",
        connectWith: ".grid",
        start: function(e, ui){
            ui.placeholder.height(ui.item.height());
             $(".column" ).find('.portlet:hidden').show()
             console.log('started')
        },
        stop: function(event, ui) {
            $(ui.helper).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone').appendTo('body');
            $(this).sortable('cancel');
        }
    });

更新:

要将元素附加到项目放置位置的第二个列表,请执行以下操作:

stop: function(event, ui) {
            var toListID = ui.item.parent().attr('id');   
            var idx = $('#' + toListID).children().index($(ui.item[0]));
            if(idx== -1)return;
            var elm = $(ui.item[0]).clone(true).removeClass('box ui-draggable ui-draggable-dragging').addClass('box-clone');
            $('#' + toListID).children(':eq('+idx+')').after(elm);
            $(this).sortable('cancel');
        }

请参阅小提琴以获取完整演示

于 2013-01-07T16:35:22.837 回答
1

如果有人使用新版本,只需使用:

revert: true

更多细节在这里:jQuery Sortable - 保留在原始列表中

于 2021-02-09T19:07:58.393 回答