2010-07-31 39 views
22

我的问题: 可排序的事件出现:当我在列表中拖动某些东西或对列表进行排序时触发。 但我只想在我拖出一个项目时启动该功能。Jquery可排序,通过拖出来删除当前项目

我的代码

 $(document).ready(function ust() 
     {  
      $('#div1').sortable({ 
       out: function(event, ui) { $('#nfo').append('OUT<br />'); } 
      }); 

     }); 

工作实例 http://jsfiddle.net/FrbW8/22/

+0

嗯,这是一个JQuery的错误? Coz ... Out - >当可分类项目从连接列表中移出时触发此事件。 开始 - >当开始排序时触发此事件。 停止 - >当排序停止时,将触发此事件。 – Peter 2010-07-31 07:10:16

+2

+1为jsFiddle – 2010-07-31 07:32:30

+3

布莱尔 - 这只是我迄今为止见过的最愚蠢的借口。 – Christian 2011-03-17 08:23:21

回答

4

这是出回调的默认行为。看到这个jquery ui trac ticket

我真的不同意'逻辑'行为的概念。

“不过,请注意,‘走出去’回调 仍然会被触发,如果你拖 到一个列表,然后松开鼠标 (但如果你没有在列表)。 这是逻辑行为,对于正常排序也会发生 。“

+0

是否可以阻止火灾?例如,我添加sortstart和sortstop。 - >如果sortart: - > abbort out:... if sortstop: - > abbort out: – Peter 2010-07-31 07:23:11

+0

这会让我觉得混乱。你可以尝试需要把你的手弄脏,并改变jquery ui src来停止这种'out'行为。 – redsquare 2010-07-31 07:29:58

+0

Hey redsquare, 但是当我更改src时,我必须在每次更新后更改它。 :( 对吧? – Peter 2010-07-31 08:29:01

33

使用beforeStop拦截该项目,并删除:

receive: function(e, ui) { sortableIn = 1; }, 
over: function(e, ui) { sortableIn = 1; }, 
out: function(e, ui) { sortableIn = 0; }, 
beforeStop: function(e, ui) { 
    if (sortableIn == 0) { 
     ui.item.remove(); 
    } 
} 

(我最初发现这个在谷歌,但再也找不到链接所以,我不引用源道歉。 )

+3

这里的链接:http://forum.jquery。com/topic/drag-item-out-of-a-sortable – lo5 2011-03-04 20:21:36

+0

看起来像这样可以防止项目的正常排序。如果我使用它并拖动项目进行排序,即使它永远不会移出控件,但是如果删除项目。 – 2012-07-22 18:53:02

3

其他解决方案似乎没有与连接的可排序列表一起工作,所以我张贴我自己的解决方案,完美适用于我的情况。当元素被放置在可排序列表之外时,这使用“可插入”插件来捕获“drop”事件。

$('#div1').sortable({ 
    .... 
}).droppable({greedy: true}) 

$('body').droppable({ 
    drop: function (event, ui) {   
     ui.draggable.remove(); 
    } 
}); 

这里是行动这种方法的的jsfiddle:http://jsfiddle.net/n3pjL/

+0

这是我今天尝试的一种方法,因为我没有找到'greedy'选项。感谢提示! – Tsunamis 2016-09-19 15:38:00

1

我用this.element.find('.ui-sortable-helper').length,使“理清事件”和“退出事件”之间的区别。在排序时,排序项目具有类ui-sortable-helper。在下降之后,除非再次开始排序(至少在我的脚本中),否则没有其他可排序的类。希望帮助某人。

相关问题