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