4

下面的代码没有完全禁用 start 事件的 sortables。它会将类ui-sortable-disabled和可排序元素添加ui-state-disabled到可排序元素中,但不会禁用该功能 - 换句话说,可排序元素看起来已禁用,但它们仍然接受拖动的项目并表现得像已启用。

var assignedSortables;
var startDrag = function(event, ui) { 
    assignedSortables.each(function() {$(this).sortable('disable');});
};

var stopDrag = function(event, ui) { 
    assignedSortables.each(function() {$(this).sortable('enable');});
};

assignedSortables = $(".my-sortable-containers").sortable({
    connectWith: '.my-sortable-containers',
    start: startDrag,
    stop: stopDrag
});

我想这样做的原因是在拖动开始时是因为我可能需要禁用已经包含被拖动项目的其他连接的可排序对象(为了简化,我去掉了逻辑)。这是一个错误还是有解决方法?

4

2 回答 2

7

我刚刚遇到了同样的问题。我能够通过在启动排序对象上调用“刷新”方法来获得我想要禁用以禁用(实数)的连接排序对象。

因此,在您的 start 回调中将类似于:

$connectedList.sortable('disable');
$(ui.sender).sortable('refresh');

我猜想该列表在触发 start 事件之前在内部抓取了一组已连接和未禁用的列表,并且在触发 start 后不检查该列表是否更改。

于 2011-05-26T20:53:32.727 回答
4

I have not checked to see if the jQuery library has "fixed" this since I asked the question, what I did instead was use the mousedown and mouseup events to disable and enable

$(".myDraggableContainer").mousedown(functionToDisableTheCorrectSortables).mouseup(functionToEnableSortables);

Doing it this way does in fact disable the receiving sortables fully

于 2010-10-14T16:38:13.420 回答