6

我有一个简单的 jquery ui 示例。基本上我必须列出项目,每个项目都是可排序的。我想要完成的是:取消对同一列表的排序。举个例子,如果我单击列表一中位置一的元素,然后将其拖动到位置 6,然后放下。我想防止这种情况发生,但是如果我将元素放在列表二中,那没关系。

我不知道如何指定,以适应我的要求。ConnectWith 似乎还不够:

$("#sortable").sortable({
    connectWith: [$('#sortable2')]
});

$("#sortable2").sortable({
    connectWith: [$('#sortable')]
});

这是示例:

http://jsfiddle.net/sQeZE/3/

4

2 回答 2

2

这可能不是要查找的内容,但您可以绑定到receiveandstop事件(它们按该顺序触发)。 receive表示从另一个列表接收到一个列表项。触发此操作时,您可以暂时取消阻止排序。 stop尝试始终阻止排序:

var blocksort = true;
//Using jQuery 1.6.4, but use `.on` when available
$("#sortable, #sortable2").bind('sortreceive', function () {
    blockSort = false;
}).bind('sortstop', function (e) {
    if (blockSort) {
        e.preventDefault();
    }
    blockSort = true;
});

http://jsfiddle.net/sQeZE/5/

于 2013-01-21T15:45:35.203 回答
1

一种选择是将列表的包含限制为另一个列表,如下所示:

$("#sortable").sortable({
    connectWith: [$('#sortable2')],
    containment: $('#sortable2') });

$("#sortable2").sortable({
    connectWith: [$('#sortable')],
    containment: $('#sortable') });

这使得#sortable' 的项目只能在#sortable2' 列表中排序,反之亦然

于 2013-01-21T15:39:24.123 回答