【问题标题】:jQuery UI Sortable - ConnectToSortable issuejQuery UI 可排序 - ConnectToSortable 问题
【发布时间】:2012-03-06 15:30:20
【问题描述】:

我正在尝试为图标创建拖放界面。基本上,我有三个 div 容器,每个容器里面都有一个有序列表。第一个列表包含图标(如<li><img /></li>),其余两个是空的,应该接收在其中拖放和排序的图标。每个空列表都与将在前端显示图标的行相关联。

我还创建了一个功能,允许在 Ctrl/Cmd + 鼠标左键上选择项目,这样用户可以一次放置多个图标。

一切都按预期工作,除了一个问题:自定义 Ctrl/Cmd + Click 选项停止作用于已被拖放的可拖动元素。

意识到之后,我做了一些测试并尽可能缩小范围:似乎罪魁祸首是'Draggable'函数中的ConnectToSortable参数。如果参数被注释掉,Ctrl+Click 功能按预期工作。问题是我需要使用此参数来存储与每个空列表(行)关联的所有图标,以便以后检索它们。

这是我的 HTML 代码:

<div id="container">
<div id="row1" class="row">
    <ol class="drop-container">
        <li class='draggable'><span class="squares blue-squares">&nbsp;</span></li>
        <li class='draggable'><span class="squares blue-squares">&nbsp;</span></li>
        <li class='draggable'><span class="squares blue-squares">&nbsp;</span></li>
    </ol>
</div>
<div id="row2" class="row">
    <ol class="drop-container">
        <li class='draggable'><span class="squares red-squares">&nbsp;</span></li>
        <li class='draggable'><span class="squares red-squares">&nbsp;</span></li>
        <li class='draggable'><span class="squares red-squares">&nbsp;</span></li>
    </ol>
</div>
<div id="row3" class="row">
    <ol class="drop-container">
        <li class='draggable'><span class="squares green-squares">&nbsp;</span></li>
        <li class='draggable'><span class="squares green-squares">&nbsp;</span></li>
        <li class='draggable'><span class="squares green-squares">&nbsp;</span></li>
    </ol>
</div>

这是我的 JS 代码:

$(function() {
// Custom function for Ctrl-Cmd Left Mouse Click
$(".draggable, .ui-draggable").click(function(e) {
    if (e.ctrlKey || e.metaKey === true) {
        if (!$(this).hasClass("selected")) {
            $(this).addClass("selected");
        } else {
            $(this).removeClass("selected");
        }
    }
});
// Draggable
$('.draggable').draggable({
    connectToSortable: ".drop-container",
    delay: 200,
    drag: function(event, ui) {
        $(".selected").removeClass("selected");
    },
    helper: "original",
    revert: "invalid",
    revertDuration: 300
});
// Droppable
$('.drop-container').droppable({
    tolerance: "touch"
});
// Sortable
$('.drop-container').sortable({
    appendTo: ".drop-container",
    connectWith: ".drop-container",
    items: ".draggable",
    revert: true
});
// Disable selection of items
$("div, ol, ul, li, span").disableSelection();
});​

我做了一个JSfiddle 来测试这个,我能够重现错误。出于此测试的目的,我使用跨度而不是实际图像。

是我做错了什么还是这是一个 jQuery UI 错误?任何想法或解决方法都非常欢迎和赞赏!

【问题讨论】:

    标签: jquery-ui jquery-ui-sortable jquery-ui-draggable


    【解决方案1】:

    你应该这样做

    $('.drop-container').sortable("refresh"); 
    

    物品放入后。请参阅:http://jqueryui.com/demos/sortable/#method-refresh

    【讨论】:

    • 嗨,马克,感谢您的回复。我在“drop”事件上添加了一个函数,就 Ctrl+左键单击选择而言,它似乎没有任何区别:一旦项目被删除,它就变得不可选择。 Here 是更新后的 JSfiddle。
    • 拖动时出现某种错误:网页错误详情用户代理:Mozilla/4.0(兼容;MSIE 8.0;Windows NT 5.1;Trident/4.0;.NET CLR 1.1.4322;.NET CLR 2.0.50727;.NET CLR 3.0.04506.30;MDDR;.NET CLR 3.0.4506.2152;.NET CLR 3.5.30729;InfoPath.2;OfficeLiveConnector.1.3;OfficeLivePatch.0.0;97890703;更新/02115)时间戳:星期三,21 2012 年 3 月 18:04:21 UTC 消息:'data(...).options' 为空或不是对象行:1402 字符:3 代码:0 URI:ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.js
    • 嗨,马库斯,感谢您回复我。我将查看该错误并尝试查看问题是由我的代码生成的,还是每次拖动时都会发生。
    猜你喜欢
    • 2011-02-11
    • 2012-07-25
    • 2011-02-09
    • 2018-03-17
    • 2011-03-25
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多