JQueryUI可拖放拖放事件在还原之前激发

JQueryUI可拖放拖放事件在还原之前激发,jquery,jquery-ui,draggable,droppable,Jquery,Jquery Ui,Draggable,Droppable,我有一个恢复功能,所以我可以添加一些额外的检查来触发恢复。将可拖动设备与可拖动设备对齐的下降功能似乎在可拖动设备恢复到其原始位置之前启动 在我看来,这种情况只有在使用revert函数时才会发生,因为在禁用的可拖放设备上,它的行为正常 $( ".box" ).draggable({ revert: function(socketObj) { if (socketObj === false) { return true; } else { if ( $

我有一个恢复功能,所以我可以添加一些额外的检查来触发恢复。将可拖动设备与可拖动设备对齐的下降功能似乎在可拖动设备恢复到其原始位置之前启动

在我看来,这种情况只有在使用revert函数时才会发生,因为在禁用的可拖放设备上,它的行为正常

$( ".box" ).draggable({
  revert: function(socketObj) {
    if (socketObj === false) {
      return true;
    } else {
        if ( $(this).hasClass("box") ) {
        return true;
      }
      return false;
    }
  },
});

$( ".ru" ).droppable({
  drop: function( event, ui ) {
    ui.draggable.position({
      of: $(this),
      my: 'left top',
      at: 'left top'
    });
  }
});

我认为这是正确的行为

禁用的可拖放区域与任何其他非拖放区域一样。当你把可拖动的东西扔到窗口的其他地方时,你会得到同样的行为

想想其他需要在drop上执行一些逻辑的用户,不管它是否是有效的drop。例如,在一个游戏中,用户只被赋予
n
放弃,无论它们是否有效,或者类似的场景。如果跌落事件不触发任何无效跌落,他们会抱怨需要一种检测跌落的方法

考虑在恢复后调用drop处理程序,这就是您要问的-

这根本没有道理。Drop首先发生,是否恢复的决定是基于丢弃的项目,Drop之后做出的。这不像将无效项悬停在可拖放项上,它会恢复删除需要发生,用户需要一种方法来识别是否发生过

我想说这不是一个bug,这是针对更多用户的最合乎逻辑的行为。您需要针对您的特定场景进行调整。如何解决取决于您的特定用例


在这种情况下,您可以将决定是否还原到drop处理程序的代码移动到drop处理程序,并根据结果执行进一步的代码:

$(“.box”).draggable({
恢复:功能(elm){
return!elm | |$(this).hasClass('invalid');
}
});
$(“.ru”)。可拖放({
drop:函数(事件、用户界面){
if(ui.draggable.hasClass(“框”)){
返回ui.draggable.addClass(“无效”);
}
ui.draggable.position({
其中:$(本),
我的‘左上’,
在“左上方”
});
}
});
$(“#ru4”)。可拖放(“选项”,“禁用”,真)
.box{
背景色:青色;
宽度:200px;
高度:30px;
位置:绝对位置;
}
茹先生{
宽度:300px;
高度:30px;
页边顶部:1px;
背景色:#888;
}

拖我
滴滴然后回复
禁用-恢复正常

请检查@Parth“return true;”,如果语句是我想添加到revert函数的额外检查的占位符。现在有什么问题?您不想让box返回到以前的位置吗?正如我在问题中所说的,drop函数在恢复发生之前启动。如果您查看JSFIDLE并拖动到第一个下拉列表,您将看到其行为。一切都很好。若您使用droppable,那个么它应该首先调用drop事件,若drop成功,那个么在它恢复之后。请勾选“否”,如我所述,在这两种情况下drop函数都不会启动。我在一个更新的提琴中更清楚地说明了这一点:@Mike在你的提琴中,如果启用了dropable,drop回调确实会启动,并且背景会变为红色。。。“还原前触发可拖放事件”是您的问题标题。。。我试图解释的是逻辑上的预期行为,但整个问题是,为什么它只在1可拖放上启动,而不在另一个上启动?@Mike,因为它被禁用了。。!它已禁用,因此不可能下降。。把它想象成任何其他正常的元素,因为它的可拖放功能被完全禁用了!为什么当你把水滴落在身体里时,它就不叫水滴了。。?因为它现在不是一个可放下的。残疾人可放下的就是这样。这不是很容易理解吗。。?你不能把东西放进一个关着的罐子里,而它是关着的。因为罐子是关着的,所以根本就不要掉到罐子里去。在另一种情况下,罐子是打开的,你把东西放进去,然后决定是否把它拿出来。看到更新的答案。我想决定它是否有效的函数仍然会在禁用的可拖放设备上运行,谢谢TJ,这就是我想要的答案。