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

我将一个锚标签变成了一个“按钮”。 有时,如果没有新的东西可以显示,则需要隐藏此标记。 如果我只是用.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'); } 

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

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

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

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

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

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

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

 var handler = function() { $(this).whatever(); }; $('a.next').click(handler); 

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

一个简单而简短的解决方案

(不使用bind / unbind方法)

如果要解除绑定,则向对象添加一个类,然后删除此类以重新绑定ex;

 $('#button').click( function(){ if($(this).hasClass('unbinded')) return; //Do somthing }); $('#toggle').click(function(){ $('#button').toggleClass('unbinded'); });