jQuery sortable('disable')来自start事件并不像预期的那样完全正常工作

时间:2009-07-27 18:52:49

标签: javascript jquery jquery-ui jquery-ui-sortable sortables

以下代码未完全禁用start事件的sortables。它会将类ui-sortable-disabledui-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
});

我想要这样做的原因是拖动启动是因为我可能需要禁用已经包含被拖动项目的其他已连接的可排序项(我为了简化而剥离了逻辑)。这是一个错误还是有办法绕过它?

2 个答案:

答案 0 :(得分:7)

我刚遇到同样的问题。通过调用启动sortable上的'refresh'方法,我能够获得我想要禁用的连接排序(对于实数)。

所以,在你的开始回调中将会是这样的:

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

我想在内部列表会在触发启动事件之前获取连接和非禁用列表的集合,并且不会检查触发启动后该列表是否发生更改。

答案 1 :(得分:4)

我没有检查过jQuery库是否已经“修复”了,因为我问了一个问题,我做的是使用mousedown和mouseup事件来禁用和启用

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

这样做实际上会完全禁用接收排序