jQuery one()处理程序执行了两次

时间:2017-09-29 17:04:52

标签: javascript jquery animate.css

我的jQuery / animate.css代码中有一个错误。问题是一个被调用两次的事件处理程序,但它应该只执行一次。你可以在这里找到代码,重要的一行如下:

JSFiddle

$('#tiles').addClass(tiles_in).one(animation_end, function() {
    // called twice
    log('tiles in');
});

要重现错误,请按以下步骤操作:

  • 等待动画结束,这将输出这些日志
    • change_tiles
    • tiles out
    • tiles in
  • 点击黄色div,这是新日志
    • tile out // normal
    • tiles in // why ?
由于事件为Tiles in,因此不应再次调用{p> one()。文档说" .replaceWith()方法删除与删除的节点关联的所有数据和事件处理程序。"所以我不知道。

2 个答案:

答案 0 :(得分:3)

  

为什么?

.one()的调用位于第一个.one()事件处理程序中,其中事件附加到同一个选择器#tiles

答案 1 :(得分:0)

我在记录被解雇的事件后自己找到了它。

https://jsfiddle.net/uhz6Ly0s/8/

animationend

第一个事件是webkitAnimationEnd,第二个事件是 $|=1;$SIG{CHLD} = "IGNORE"; 。出于某些原因,第二个在click事件结束时被触发。