我将锚标记<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');
}
上面示例的最后一部分不起作用。 click事件实际上并未重新绑定到锚点。有没有人知道完成这个的正确方法?
我是一个自学成才的jquery家伙,所以像unbind()和bind()等一些更高级别的东西都在我脑海中,而jquery文档对我来说并不是很简单。
答案 0 :(得分:15)
我只想添加一张支票,看看它是否先制作动画:
$('a.next').click(function() {
if (!$(this).is(":animated")) {
// do stuff
}
});
答案 1 :(得分:6)
重新绑定点击事件时,您将重新开始。您需要提供要处理事件的函数。在你打电话给“unbind”之后,jQuery不会为你记住它们。
在这种特殊情况下,它有点复杂。问题在于,当您启动这些动画时,您将启动一系列由计时器驱动的动作。因此,解除绑定并重新绑定点击处理程序本身中的“click”处理程序实际上无济于事。什么 帮助(假设您不想用 首先设置“click”处理程序时,可以将函数声明与“click()”调用分开: 然后,如果您最终想要取消绑定/重新绑定,您可以重复调用“click”并以相同的方式引用“handler”函数。is(":animated")
技巧解决问题)将取消绑定处理程序,然后重新绑定动画中的“完成”回调。 / p>
var handler = function() {
$(this).whatever();
};
$('a.next').click(handler);
答案 2 :(得分:2)
更简单的解决方案
(不使用bind / unbind方法)
是要向对象添加一个类,如果你要取消绑定它,然后删除这个类来重新绑定ex;
$('#button').click( function(){
if($(this).hasClass('unbinded')) return;
//Do somthing
});
$('#toggle').click(function(){
$('#button').toggleClass('unbinded');
});