使用 jqueryui 的可排序插件时,一旦您在开始拖动后将鼠标移到放置位置,它会记住并放在那里,即使您在释放鼠标时没有放在任何地方。
有没有办法防止这种情况发生,以便在释放鼠标时如果拖动的 portlet 不在放置位置上方,则它会跳回其原始位置?
使用 jqueryui 的可排序插件时,一旦您在开始拖动后将鼠标移到放置位置,它会记住并放在那里,即使您在释放鼠标时没有放在任何地方。
有没有办法防止这种情况发生,以便在释放鼠标时如果拖动的 portlet 不在放置位置上方,则它会跳回其原始位置?
我有一个解决方法来防止不适当的分配,我的代码更复杂,所以我把它剥离到了最基本的必要性。
使用 OVER 事件向目标添加悬停类
over: function(event,ui){
$(this).addClass('hover');
}
使用 OUT 事件从目标中移除悬停类
out: function(event,ui){
$(this).addClass('hover');
}
如果目标没有悬停类,则在接收时取消排序。取消将列表返回到排序开始之前的状态
receive: function(event,ui){
if( !$(this).hasClass('hover')){
$(this).sortable('cancel');
}
}
这仍然留下了另一个问题。目标不会再次响应 OVER 事件,直到某个其他目标首先触发 OVER 事件。
清单 A 项目 1 项目 2
清单 B
第 3 项
此序列显示如何清除假定的目标
我仍在寻找解决最后一个问题的方法,因为它需要用户通过拖动进行额外的动作以使目标再次处于活动状态(假设他们想将项目 1 从列表 A 拖动到列表 B 但过冲,现在列表 B 赢了'不要第二次触发 MOVE 这意味着我不能将悬停类放在它上面以显示它是活动的放置点。
总之, sortable 会触发 OUT,但仍然会在触发 RECEIVE 的 drop 事件中记住目标,并且还可以防止