如何防止触发多个jQuery UI droppable?

时间:2009-08-18 06:41:21

标签: jquery jquery-ui draggable droppable

我有一个jQuery UI draggable和几个单独定义的droppables。由于其中一个droppable配置为tolerance: 'intersect',因此可以同时将多个droppable拖放到drappable上。

阻止意外摔倒的最佳方法是什么?基本上,我想优先考虑droppables,以便在触发另一个droppable时不会触发tolerance: 'intersect'的droppables。

更新 - 有关澄清事项的更多信息:

  • tolerance: 'pointer'的一类droppable外,所有droppable都配置为tolerance: 'intersect'

  • 一类droppable有tolerance: 'intersect'的原因是droppables非常狭窄,用户在使用tolerance: 'pointer'找到它们时遇到问题。

  • 将droppables进一步拆开不是一种选择。

  • 没有任何droppable重叠,但是draggable足够大,可以与tolerance: 'intersect'的droppable重叠,而鼠标指针在tolerance: 'pointer'的另一个droppable上。通过这种方式,最多可以同时触发两个droppable。

  • 如果已经触发了另一个可放置的内容,则可以通过忽略tolerance: 'intersect'可放置的内容来确定用户的意图;即,如果用户将鼠标指针移动到具有tolerance: 'pointer'的可放置对象上,则可以安全地假设他/她打算将其放在那里。问题是,我无法弄清楚如何忽略不需要的droppable。

3 个答案:

答案 0 :(得分:7)

over:中,为预期的droppable分配一个类,并从所有其他droppable中删除该类:

$(".dragArea").not($(this)).removeClass("dragHover");
$(this).addClass("dragHover");

然后在drop:中,检查是否设置了类:

if(!$(this).is('.dragHover')){
    return false;
}

这样,只会触发一个dropable。

答案 1 :(得分:1)

也许在“不太喜欢的”可投放的过度事件中,您可以检查可拖动是否也超过“首选”可投放,如果禁用“不太优选”可投放。

对于这个术语感到抱歉,只是想集体讨论。

答案 2 :(得分:0)

将它们彼此远离地移动,以便它们不会同时掉落。否则,你应该如何确定用户的意图?你打算计算每个相交的可放置的可拖动百分比吗?