我发现在不遇到一些 jQuery UI 错误的情况下取消排序的唯一方法是异步取消排序。
像其他人建议的那样使用停止选项是不可接受的,因为它允许用户首先在屏幕上拖动项目,然后在完成后取消它。这不满足 OP 最初对“防止”拖动某些项目的关注。
如果您尝试在排序事件期间取消可排序,您将在 jQuery UI 中遇到错误。像这样的错误Uncaught TypeError: Cannot read property '0' of null
我可以开始工作的唯一解决方案是,当用户开始拖动时,屏幕上会出现短暂的闪烁。但是它立即取消了拖动,并且没有任何 JS 错误。
var isCancel = false;
element.sortable({
start: function() { isCancel = false; },
sort: function(event, ui) { // prevent dragging if row has dynamically assigned class
if (ui.item.hasClass('no-drag')) {
isCancel = true;
// allow current jQuery UI code to finish runing, then cancel
setTimeout(function() {
element.sortable('cancel');
}, 0);
}
},
stop: function() {
if (isCancel) return;
// your normal processing here
},
});