为什么jQuery UI的droppable`accept`函数在没有任何内容的情况下运行?

时间:2012-02-15 20:05:23

标签: jquery jquery-ui

我在小提琴的红色框上定义了一个接受函数。

预期

当draggable进入时,接受运行一次。

实际

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

行动中:http://jsfiddle.net/bjJv8/

我不是在问如何避免这种情况;我可以编写自己的恢复功能,但似乎我必须使用的主要原因是因为这似乎不正常。

要查看我在说什么,请将黄色框拖到屏幕左侧。你会看到接受计数器增加每个阻力像素。到底是怎么回事?为什么accept在没有任何东西被拖到它上面时会运行这么多次?

1 个答案:

答案 0 :(得分:2)

Accept可以是一个描述可以拖入droppable的项的选择器(通常是一个类),也可以是一个函数,如果传递给它的对象可以放在目标上,它将返回true。

不方便的是,似乎接受函数在每个拖动事件(开始,停止,进入,离开)以及沿着页面边缘的拖动上运行。如果你的accept函数变得非常大,你可能想把它放在drop / stop方法中,如果它是无效的drop,则还原。

或者,您可以通过确定项目是否已被删除或正在被删除来开始接受函数,并且仅在这种情况下执行繁重的工作(否则返回true,请参阅下面的注释)。

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