解绑后如何"重新绑定"点击事件("点击")?

Ben*_*Ben 13 jquery animation bind unbind

我将锚标记<a class="next">next</a>制作成"按钮".有时,如果没有新的内容可以显示,则需要隐藏此标记.如果我只是用.hide()隐藏按钮并使用.show()重新显示它,一切正常.但我想使用.fadeIn()和.fadeOut()代替.

我遇到的问题是,如果用户在fadeOut动画期间点击按钮,它可能会导致我运行该节目的逻辑出现问题.我找到的解决方案是在原始单击函数开始后从按钮解除绑定事件,然后在动画完成后重新绑定它.

$('a.next').click(function() {
    $(this).unbind('click');
    ...
    // calls some functions, one of which fades out the a.next if needed
    ...
   $(this).bind('click');
}
Run Code Online (Sandbox Code Playgroud)

上面例子的最后一部分不起作用.click事件实际上并未重新绑定到锚点.有谁知道完成这个的正确方法?

我是一个自学成才的jquery家伙,所以像unbind()和bind()等一些更高级的东西都在我脑海里,而jquery文档对我来说并不是很简单.

nic*_*ckf 15

我只想添加一个检查,看看它是否先制作动画:

$('a.next').click(function() {
    if (!$(this).is(":animated")) {
        // do stuff
    }
});
Run Code Online (Sandbox Code Playgroud)


Poi*_*nty 6

重新绑定点击事件时,您将从头开始.您需要提供要处理事件的函数.在你打电话给"unbind"之后,jQuery不会为你记住它们.

在这种特殊情况下,它有点复杂.问题在于,当您启动这些动画时,您将启动一系列由计时器驱动的动作.因此,解锁和重新绑定点击处理程序本身内的"click"处理程序实际上无济于事.什么有所帮助(假设你不想用is(":animated")技巧解决问题)将取消绑定处理程序,然后重新绑定动画中的"完成"回调.

当您首先设置"单击"处理程序时,您可以将函数的声明与对"click()"的调用分开:

var handler = function() {
  $(this).whatever();
};
$('a.next').click(handler);
Run Code Online (Sandbox Code Playgroud)

然后,如果您最终想要取消绑定/重新绑定,您可以重复该调用以"单击"并以相同的方式引用"处理程序"功能.