2011-01-27 97 views
4

使用jQuery UI,我有div foo这是可拖动和可拖拽,和div bar这是唯一可droppable。拖动发生在打开helper: 'clone'选项时,因此原始foo实际上并未移动。当我在原始foo的顶部放置克隆的foo时,drop: function不会被调用。克隆的jQuery可拖动不能丢弃本身

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

我刚才说的foo和酒吧,可拖动和投掷的许多倍,甚至我很困惑,但这个例子应该澄清一些事情:

http://jsfiddle.net/5KATZ/

如果试图拖动第一盒到第二或第三,它的作品。但是如果不是将它拖放到第二个盒子上,而是开始拖拽它,然后尝试将其放到自身上,则不会发生任何反应。如果这是事情应该如何运作,那么我做错了什么?如果这是jQuery UI中的一个错误,那么你能想出任何好的解决方法吗?

回答

1

编辑

这一个效果更好:http://jsfiddle.net/kW369/,我已经离开了老了。

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

它通过检测拖动div的位置,并看到它,如果崩溃与第一个div位置。我知道这不是最清楚的解决方案,但它是我能够想出的唯一解决方案。此外,这有一个错误,因为位置是使用div的左上角进行计算的,所以如果你将第一个div放到第二个div的第二个div上,但是你要拖动的div的左上角在第一个之上它会表现得像你将它放到两个div上。您应该使用鼠标位置代替ui.position ['top']和ui.position ['top'],然后离开以更精确地检测位置。

+1

非常好!这是一个非常聪明的方法,我在这个过程中学习了jQuery的`position()`函数。我意识到需要能够拖放一个可拖动对象本身可能是一个罕见的请求,但在我的MasterMind的JavaScript实现中,如果你拿起一块来移动它,然后决定把它放回到同一个地方,它消失,这很奇怪。请参阅:http://martinsmucker.com/mastermind – 2011-01-28 13:58:20