【问题标题】:Nested drag and drop using jquery ui使用 jquery ui 进行嵌套拖放
【发布时间】:2015-04-16 08:39:56
【问题描述】:

将物品放入已丢弃的物品中

<table id='list1' >
</table>

<ul id="list2" >
</ul>

<table id='list3' >
<tr><td>test<ul style="min-height: 100px;border:1px solid red" class="drop-container"></ul></td></tr>
</table>

我有以下代码

$( "#list3 li" ).draggable({
            connectToSortable: "#list2",
            helper: "clone",
            revert: "invalid"
});
$( "#list1 li" ).draggable({
        connectToSortable: "#list2",
        helper: "clone",
        revert: "invalid",
        greedy: true
});

如何将 list1 项直接拖放到 list2 中,并且 list2 的 ul 布局标签将通过 jquery 的拖放 API 来自 list3?

小提琴:http://jsfiddle.net/bhumi/nkvzdwk9/1/

【问题讨论】:

  • 您想对项目进行排序并在列表之间拖放?还是其他?
  • 我想在列表之间拖放项目意味着首先我将项目从 list3 拖放到 list2,然后我将从 list1 拖放到拖放项目的内部区域
  • 先拖动layout1并在那个要拖动的媒体

标签: jquery jquery-ui


【解决方案1】:

所以你想要达到的可以这样概括

第1步:将一些布局(位于li标签内)从#list3拖放到#list2

第 2 步:从 #list1 直接到#list2#list2 布局的ul 标签.drop-container 现在已经被拖到#list2

目前,您正在将#list1 li 放入#list 2,但它应该放入.drop-container of #list2#list2(如果您想直接将#list li 添加到#list2

所以#list1 li 应该连接到.drop-container of #list2#list2

$("#list1 li").draggable({
    connectToSortable: "#list2 .drop-container,#list2",//both element should be connected
    helper: "clone",
    revert: "invalid",
    greedy: true
});

之后,sortable API 需要在 #list2 收到来自#list3 的一些 Layout 后才添加到 .drop-container of #list2

所以在list2sortable 的接收方法中调用sortable 上的#list2 .drop-container。 现在你#list2的接收函数变成了

receive: function (event, ui) {
        console.log(ui);
        console.log(event);
        var this_id = $(ui.item).attr("id");
        var preview = $(itemContext).html().replace(/<!--/g, '').replace(/-->/g, '');

        $(itemContext).attr("id", this_id);
        $(itemContext).css("width", $('#list2').width() - 20).addClass("ui-state-default").height('auto');
        $(itemContext).html(preview);

 //Modified code starts here, the sortable should be added here

        $("#list2 .drop-container").sortable({//call sortable to every element which you want to drop to.
            connectWith: "#list1",
            over: function () {
                removeIntent = false;
            },
            out: function () {
                removeIntent = true;
            },
            beforeStop: function (event, ui) {
                itemContext = ui.item.context;
                if (removeIntent == true) {
                    ui.item.remove();
                    disp($("#list2").sortable('toArray'));
                }
                //console.log(itemContext);

            },
            receive: function (event, ui) {
                console.log(ui);
                console.log(event);
                var this_id = $(ui.item).attr("id");
                var preview = $(itemContext).html().replace(/<!--/g, '').replace(/-->/g, '');

                $(itemContext).attr("id", this_id);
                $(itemContext).css("width", $('#list2').width() - 20).addClass("ui-state-default").height('auto');
                $(itemContext).html(preview);

                //console.log(this_id);
                //console.log(preview);

            }
        }); //.disableSelection()

    //end of modified code

        //console.log(this_id);
        //console.log(preview);

    }
}); 

WORKING DEMO, full code

【讨论】:

  • 感谢您的回复。但它并没有下降到特定布局的 ul 标签
  • 已编辑查看更改,现在它将放入 ul .drop-container
  • 但它不允许直接拖放到 list2 意味着可以拖放布局或直接在 list2 中,并且它也不允许拖放已经拖放的媒体
  • 如果首先我删除直接媒体项目,然后我删除布局,然后我尝试进入布局,它就无法正常工作。
  • 我不小心在list2 上再次调用了 sortable。已修复,谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-05
  • 1970-01-01
  • 1970-01-01
  • 2017-10-19
相关资源
最近更新 更多