2012-07-24 43 views
3

我有一个设置,我希望有条件地恢复正被丢弃如何有条件地取消掉落时悬停的放置?

(我使用accept事件尝试过的元素,但被证明过于频繁的实际用途运行 - 不仅如此,它的使用取消其他事件)。

编辑:它实际上并不是说它运行得太频繁,而是说..当它发生时,$(this).attr('id')在重新浏览元素时变得不正确。 http://jsfiddle.net/UvByv/1/

例如以上:

  1. 抢一块和悬停在各个正方形。
  2. 请注意它悬停的平方数。它并不总是按照它应该更新的。

您将看到方形元素被编号。当一个正方形被重新访问时,$(this).attr('id')显然不会及时更新

* 我想要做的就是有条件地“切换droppability”,在悬停在元素上时读取DOM。看起来accept并不完全与我的目的其余的DOM同步。 *

的原因是,你会与我的例子中看到的,是与棋子方格,这取决于广场一块超过在特定的时间点,我可能不希望允许的下降。其他时候,我会想。

回答

3

如果我正确理解这一点,你不仅要根据当前空间是否被占用来切换droppability,而且如果当前移动是有效的象棋移动(毕竟,一些有效的象棋移动涉及一个棋子取代另一个)。这是真的?如果是这样,我会认为使用复杂的函数实际上是正确的策略。

该函数接收的临界两条信息:所述片被拖动(唯一“EL”参数)和空间可能被拖动到(这是函数的this变量)。您注意到accept函数被多次调用,并且这是通过设计的:正如您在jQuery UI source code中看到的那样,当拖动可拖动对象时,将评估板上每个可放置空间的accept函数。这意味着当你开始移动一块时,每个可放置的空间将计算它是否可以接受该块。

我知道你想评估这个“飞行中”作为一块传递另一个广场,但是提前计算它的开销导致明显的性能问题?如果没有,我会去accept

编辑:我创建了一个的jsfiddle演示如何使用.append移动一块从广场方:http://jsfiddle.net/58t7L/3/

编辑凯文:接受,因为在聊天马特帮助的分层问题,以表明我在接受中使用$(this)的方法并不完全适应如何使用accept。 。over:将用于我正在描述和使用的过程,而'accept'确实需要一个不同的过程,因为它会一次评估所有可放入的容器。聊天链接在下面评论

+0

是的。良好的分析。我真的很期待看到如果*接受*唯一*的方式来评估我的国际象棋规则悬停。如果是,那么你赢了。我自己的*接受*的实验是它笨重,而且实际上有时候并不总是会在你想的时候开火。 (并且评估不会导致性能问题)这可能是因为我错误地使用了它,或者可能是因为它笨重。 – KevinDeus 2012-07-27 14:26:26

+0

当“accept”被触发时,我编辑了jsFiddle到console.log:http://jsfiddle.net/rUwgc/20/ ...对我来说似乎可靠。你能否创建一个jsFiddle,其中“接受”的行为不如预期? 可能有一种方法可以计算悬停和启用/禁用可接受的参数,但是这种解决方案对我来说似乎更笨拙......如果用户多次在它上面盘旋,最终会多次评估一个点。 'accept'好像就是为你的用例而构建的。 – 2012-07-27 18:09:33

+0

我注意到,当可接受的是真时,'accept'函数被调用了很多次(http://jsfiddle.net/rUwgc/22/)。不过,如果表现不是问题,我会认为这仍然是一个可靠的战略。 – 2012-07-27 18:32:43