为什么当没有任何东西在其上方时,jQuery UI的droppable `accept`函数会运行?

4

我在fiddle中的红色框中定义了一个accept函数。

期望效果

当可拖动对象进入时,Accept函数只运行一次。

实际效果

如果我将黄色框拖到HTML屏幕左侧,则Accept似乎在拖动进入时运行一次,在离开时再运行一次,并且如果我将黄色框拖到HTML屏幕左侧,它会运行很多次。

演示:http://jsfiddle.net/bjJv8/

我不是在问如何避免这种情况;我可以编写自己的还原功能,但主要原因似乎是因为这个功能似乎不能正常工作。

要看到我的意思,请将黄色框拖到屏幕左侧。您将看到每个拖动像素都会增加accept计数器。发生了什么?为什么即使没有拖动到上面,accept也会运行多次?

1个回答

2

Accept可以是一个选择器(通常是类),描述可以拖动到可放置区域的项目,或者是一个函数,如果传递给它的对象可以被放置在目标上,则返回true。

不方便的是,似乎accept函数在每个拖动事件(开始、停止、进入、离开)以及沿页面边缘拖动时都会运行。如果您的accept函数将变得相当大,您可能希望将其放在drop/stop方法中,并在无效的情况下恢复。

或者,您可以通过确定项目是否已被放置或正在被放置来启动accept函数,并仅在这种情况下进行重负载处理(否则返回true,请参见下面的注释)。

附注:如果accept在拖动开始时返回false,则它不会运行任何其他事件(除了沿页面边缘拖动)。


哦。我找文档的时候遇到了一些麻烦,所以我只是凭记忆回答了。 - yoozer8
有趣的是,它可以在startdrag、stopdrag、enter、leave等事件上运行,有时也会在move上运行,而且在到达页面边缘时很多次也会运行...基本上对于任何事件都适用。 - yoozer8
是的,这对我来说似乎是错误的,这就是为什么我感到如此困惑的原因。我的应用程序中的接受逻辑可能会很复杂,我不希望它每秒运行50次。 - kamranicus
我将它改成了jQuery 1.7.1和UI 1.8.16,现在好多了,但是如果你沿着左侧红框的边缘拖动,它仍然会出现这种情况。 - kamranicus
谢谢,那就是我最终做的(在 drop 中处理)。 - kamranicus
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接