如何防止jquery可排序的portlet在不通过它们时分配

时间:2012-09-17 09:25:23

标签: jquery-ui jquery-ui-sortable

当使用jqueryui的可排序插件时,有一个问题是,一旦你在开始拖动后将鼠标移动到放置位置,它就会记住它并将它放在那里,即使你在释放鼠标时没有任何东西。< / p>

有没有办法防止这种情况发生,以便拖动的portlet在释放鼠标时没有超过放置位置时会跳回原来的位置?

1 个答案:

答案 0 :(得分:1)

我有一个工作来防止不适当的分配,我的代码更复杂,所以我把它剥夺了必要性。

使用OVER事件将悬停类添加到目标

over: function(event,ui){
  $(this).addClass('hover');
}

使用OUT事件从目标

中删除悬停类
out: function(event,ui){
  $(this).addClass('hover');
}

如果目标没有悬停类,则在RECEIVE上取消排序。取消将列表返回到排序开始之前的状态

receive: function(event,ui){
  if( !$(this).hasClass('hover')){
    $(this).sortable('cancel');
  }
}

这还有一个问题。在某个其他目标首先触发OVER事件之前,目标不会再次响应OVER事件。

列表A. 第1项 第2项

列表B

第3项

  1. 点击第1项,在列表B上拖动:在列表B上触发OVER事件
  2. 继续从列表B中拖出项目1:在列表B上触发OUT事件
  3. 在清单列表A和列表B的位置释放项目1:在列表B上触发RECEIVE(但如果列表B没有悬停类,我们可以取消排序 - 由OUT删除在第2步。
  4. 此序列显示如何清除假定目标

    1. 点击第1项,在列表B上拖动:在列表B上触发OVER事件
    2. 继续从列表B中拖出项目1:触发OUT事件 名单B
    3. 继续再次在列表B上拖动项目1:未触发OVER事件
    4. 继续在列表A上拖动项目1:在列表A上触发OVER事件
    5. 继续从列表A中拖出项目1:在列表A上触发OUT事件
    6. 继续再次在列表B上拖动项目1:在列表B上触发OVER事件
    7. 我仍在寻找绕过这最后一个问题的方法,因为它需要用户通过拖动进行额外的动作以使目标再次激活(假设他们想要将项目1从列表A拖到列表B但是过冲现在列表B不会在第二次触发MOVE,这意味着我无法将悬停类放在它上面以显示它是活动的丢弃点。

      总之,可排序触发OUT,但仍会记住触发RECEIVE时掉落的目标,并且还会阻止