如何使用Draggable和Selectable JQuery将一个或多个项目拖动到元素

Evo*_*net 6 javascript jquery jquery-ui

我想知道如何将一个或多个项目(我个人的个人记录,通过他们的头像照片)拖到目标(在我的情况下是一个城市列表),然后更新数据库中的拖动项目的详细信息他们被拖到的项目.

我目前正在为单项工作.

我有一个侧边栏,其中包含我从EntityFramework数据库中检索的位置列表:

<ul>
<li class="droppable">
    <span>Sydney</span>
</li>
<li class="droppable">
    <span>Brisbane</span>
</li>
<li class="droppable">
    <span>Melbourne</span>
</li>
</ul>
Run Code Online (Sandbox Code Playgroud)

在我的主窗口中,我有一个人的图像网格,我正在使用Jquery UI可选择以启用这些图像:

<ul class="people-list" id="selectable">
    @foreach (var item in Model.People)
    {
        <li>
            <img src="@item.Photo" style="width:100%" class="img-polaroid" />                
        </li>
    }
</ul>

 $(function () {
    $("#selectable").selectable({
        selected: function (event, ui) {
            if ($(ui.selected).hasClass('click-selected')) {
                $(ui.selected).removeClass('ui-selected click-selected');

            } else {
                $(ui.selected).addClass('click-selected');

            }
        },
        unselected: function (event, ui) {
            $(ui.unselected).removeClass('click-selected');
        }
    });

});
Run Code Online (Sandbox Code Playgroud)

我想做的是,一旦用户选择了一个或多个人,他们就可以将所选人员拖动到其中一个位置,然后更新数据库.

因此,如果用户将PersonID 4,5和9拖动到'Sydney',那么我需要异步更新数据库以执行此操作.

我添加了JQuery Draggable和Droppable,我可以将单个人拖到其中一个位置,然后更新数据库,但我无法使用selectable来允许选择多个项目.

$(function () {
    $(".img-polaroid").draggable({
        containment: "document",
        helper: 'clone',
        opacity: 0.70,
        zIndex: 10000,

    });
    $(".droppable").droppable({
        hoverClass: "ui-state-hover",
        tolerance: "pointer",
        drop: function (event, ui) {
            $.ajax({
                type: "POST",
                url: '/Person/UpdateLocations/' + $(this).attr("id") + '|' + $(ui.draggable).attr("id"),
                success: function (data) {
                    $('.draggable').draggable('destroy');
                    $('#successMsg').empty();
                    $('#successMsg').append(data);
                    $('#successDiv').show();
                    $('.draggable').draggable({ revert: true });
                }
            });
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

mar*_*ian 1

我发现 .selectable() 和 .draggable() 不适用于同一元素。我的建议是创建您自己的多选行为。

将值 (id) 嵌入 HTML 元素

将城市和人员的 ids 作为值嵌入到相应的 HTML 元素中,eq :<li class="droppable" data-val="sydney"><span>Sydney</span> </li><img src="" class="img-polaroid" data-val="4"/>

模仿多选

每个选定的元素都将由特定类标记,在 中定义selectedClass = "ui-selected"。该类将通过单击事件进行切换。拖动事件时可能未选择某个元素,因此我们需要添加selectedClasson draggable.start

.draggable仅适用于单个拖动元素(CMIIW),因此我们通过更改元素的top和属性来移动所选元素。元素的left集合。position=relative#selectable

降低

需要在回调上完成的操作droppable.drop:准备数据并执行 AJAX 请求。如果 AJAX 请求成功,可选择的元素将被删除并更新消息。如果 AJAX 请求失败,可选元素将放回其原始位置。

请看一下示例:http://jsfiddle.net/marson/zSCAb/131/。希望这可以帮助。