Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery可排序取消事件(如果无效)_Jquery_Jquery Ui Sortable - Fatal编程技术网

jQuery可排序取消事件(如果无效)

jQuery可排序取消事件(如果无效),jquery,jquery-ui-sortable,Jquery,Jquery Ui Sortable,我有一个可以排序的列表。在开始排序之前,我想检查列表中的所有元素是否有效。如果没有,请取消该事件并保持列表不变 你可以在这里找到代码 当我使用它时,事件被取消,但元素被删除 start: function (event, ui) { if (!valid()) { return false; // it cancel's but the element is removed... } } 也许我应该实施一个“beforeStart”活动?建议

我有一个可以排序的列表。在开始排序之前,我想检查列表中的所有元素是否有效。如果没有,请取消该事件并保持列表不变

你可以在这里找到代码

当我使用它时,事件被取消,但元素被删除

start: function (event, ui) {
    if (!valid()) {
        return false;
        // it cancel's but the element is removed...
    }
}
也许我应该实施一个“beforeStart”活动?建议

您可以使用


演示:

我发现取消排序而不碰到一些jQuery UI错误的唯一方法是异步取消排序

使用其他人建议的停止选项是不可接受的,因为它允许用户先在屏幕上拖动项目,然后在完成后取消。这并不能满足OP最初对“防止”拖动某些项目的关注

如果在排序事件期间尝试取消排序,jQuery UI中会出现错误。类似于
uncaughttypeerror的错误:无法读取null的属性“0”

我能开始工作的唯一解决方案是,当用户开始拖动时,屏幕上有一个简短的闪光灯。但它立即取消了拖动,并且没有任何JS错误

var isCancel=false;
可排序元素({
start:function(){isCancel=false;},
排序:函数(事件,ui){//如果行具有动态分配的类,则防止拖动
if(ui.item.hasClass('no-drag')){
isCancel=true;
//允许当前jQuery UI代码完成运行,然后取消
setTimeout(函数(){
元素。可排序(“取消”);
}, 0);
}
},
停止:函数(){
如果(isCancel)返回;
//您在这里的正常处理
},

});虽然它可能会让用户感到困惑,但已经足够好了。谢谢$(这个)。可排序(“取消”);在单列表排序中工作得非常好。谢谢这太可怕了!使用停止选项不是OP要求的。是否允许用户开始拖动,然后在最后取消?可怕的经历。我们需要能够在开始之前取消它。这是我提出的解决方案,它在开始时取消排序,并且没有任何Js错误。作为建议,您可以取消不应排序的特定元素,并允许使用“取消”选项同时对其他有效元素进行排序
$("#list").sortable({
    connectWith: ".connectedSortable",
    items: '.sortable-item',
    handle: '.handle',
    placeholder: "ui-state-highlight",
    stop: function (event, ui) {
        console.log('stop')
        if (!valid()) {
            $( this ).sortable( "cancel" );
        }
    }
});