jQuery 可排序 - 物品有时会在掉落时消失

jQuery sortable - item sometimes disappears on drop

我有 30 多个可排序列表,其中一些列表在左侧,另一个在手风琴中(见下图 - 仅显示 6 个)。我希望能够将手风琴列表中的项目移动到其他列表,反之亦然,但不能在手风琴选项卡之间移动。

效果很好,但只有一个令人讨厌的行为。有时,当我尝试将一个项目从一个列表移动到另一个列表时,它会消失(它 "flies" 到屏幕顶部)并最终出现在另一个列表中;例如:从列表 D 到列表 A,但最终在手风琴选项卡 3 中,或从列表 C 到列表 B,但最终在手风琴选项卡 2 中。

//for each list in the accordion, I created the sortable like this
$accordionSortableList.sortable({
    connectWith: ["#listA,#listB,#listC"],
    start: cloneContentItem,
    stop: onSortableStop,
    receive: onSortableReceive,
    revert: 100
}).disableSelection();

//for the other
$boxSortableList.sortable({
    connectWith: ["#listA,#listB,#listC,#listD,#listE,#listF"],
    receive: onSymbolChanged,
    remove: onSymbolChanged,
    revert: 100
}).disableSelection();

在我看来,好像抛出了一个错误的事件。如果删除成功,将引发 receive 事件,否则将引发 remove 事件。

Here 是一个 JSFiddle link。如果您从手风琴中拖出一个项目并将其放入例如在 "box-left-1" 上方一点点,该项目将消失并落在手风琴中的某个位置。我有一个从手风琴中删除该项目的解决方案,但我也想将该项目放在目标框中。有人能帮我吗?

在我的代码中,我将手风琴 "content panel" 定义为可排序的,这就是奇怪行为的来源。我必须创建一个可排序的容器并将其放入手风琴中。

$.each(rightBoxes, function(index, box) {
    var $accHeader = $("<div>").html(box.title);
    $accHeader.appendTo($("#rightPanel"));

    var $accContent = $("<div>").attr("id", box.id);

    var $contentBox = $("<div>"); // This is important
    $.each(box.items, function (idx, item) {
        var $div = $("<div>").html(item.title);
        $div.appendTo($contentBox);
    });
    $contentBox.sortable({
        connectWith: ["#left-1,#left-2,#left-3"]
    }).disableSelection();
    $contentBox.appendTo($accContent);

    $accContent.appendTo($("#rightPanel"));
});