【问题标题】:Cloned jQuery draggable can't be dropped on itself克隆的 jQuery 可拖动对象不能放在自身上
【发布时间】:2011-06-16 20:01:31
【问题描述】:

使用 jQuery UI,我有一个可拖动和可放置的 div foo,以及一个仅可放置的 div bar。拖动发生在helper: 'clone' 选项打开的情况下,所以原来的foo 实际上并没有移动。当我将克隆的foo 放在原始foo 之上时,drop: function 不会被调用。

这看起来很奇怪,因为当我将克隆的foo 放到bar 上时它会起作用。它还可以将其他可拖动对象拖放到foo。唯一的问题是我不能将foo 放到自身上。

我刚才说了很多次 foo 和 bar 以及 draggable 和 droppable ,以至于我都感到困惑,但是这个例子应该清楚了:

http://jsfiddle.net/5KATZ/

如果您尝试将第一个框拖到第二个或第三个框上,它会起作用。但是,如果不是把它放到第二个盒子上,而是开始拖动它,然后尝试把它放到它自己身上,什么也没有发生。如果这就是事情应该如何运作,那么我做错了什么?如果这是 jQuery UI 中的一个错误,那么您能想到任何好的解决方法吗?

【问题讨论】:

    标签: jquery jquery-ui draggable droppable


    【解决方案1】:

    编辑

    这个更好用:http://jsfiddle.net/kW369/,我也把旧的留了。

    好问题!这是 jQuery 中的默认行为,我认为它以这种方式工作是正确的……需要将项目放到自身上是一件奇怪的事情。无论如何尝试this jsFiddle,这是您问题的部分解决方案。

    它的工作原理是检测拖动的 div 的位置,并查看它是否与第一个 div 位置折叠。我知道这不是最明确的解决方案,但它是我能够想出的唯一解决方案。此外,这有一个错误,因为位置是使用 div 的左上角计算的,所以如果你通过将鼠标放在第二个 div 内但你正在拖动的 div 的左上角将第一个 div 放到第二个上在第一个之上,它的行为就像你把它放到两个 div 上一样。您应该使用鼠标位置而不是 ui.position['top'] 和 ui.position['top'] 和 left 来更精确地检测位置。

    【讨论】:

    • 非常好!这是一个非常聪明的方法,在这个过程中我设法了解了 jQuery 的position() 函数。我意识到需要能够在自身上放置一个可拖动对象可能是一个罕见的请求,但是在我的 MasterMind 的 JavaScript 实现中,如果你拿起一块来移动它,然后决定把它放回同一个地方,它消失,这很奇怪。见:martinsmucker.com/mastermind
    • 谢谢!一直在兜圈子!!
    • 奇怪之处不在于人体工程学,而实际上在于 jQuery。我相信所有人都同意将一个物体拖到几乎零距离应该没有结果。当删除“任何地方但”原始位置有意义时,问题就出现了。例如。通过将工具从工具栏中拖离工具栏来删除它们。原始位置需要是另一个可放置的目标。然后那个 drop 处理程序恢复,而周围的停止处理程序到处都具有实际效果。
    猜你喜欢
    • 1970-01-01
    • 2011-01-29
    • 1970-01-01
    • 2011-07-30
    • 2011-05-27
    • 2011-06-13
    • 2018-05-13
    • 2011-12-30
    • 2018-07-25
    相关资源
    最近更新 更多