在我的函数运行时如何解除绑定或阻止其他单击事件发生?

时间:2016-06-29 20:16:35

标签: javascript jquery html

我设置了旋转木马,我点击导航箭头的事件。单击它们时,我使用jQuery动画在下一个轮播幻灯片的元素中制作动画,由于动画的性质,我使用setTimeout()几次。

我有一个错误,如果我点击一个箭头,然后快速单击上一个或下一个箭头,动画将因为超时(这个项目中必需的)而混淆,并且在屏幕上不呈现任何内容。我已经看了一段时间,我认为最好的方法可能是阻止其他箭头在当前动画完成之前被点击。

每个箭头由click而不是on:('click', function() ...等控制:

$("#arrow1").click(function() {...}

我看过

$("element").off("click");

但由于他们没有使用' on'方法我认为这不会起作用。

我想要类似的东西:

$("#arrow1").click(function() {
 $("#arrow2, #arrow3, #arrow4").off("click");
 // do my animations, then
 $("#arrow2, #arrow3, #arrow4").on("click");
}

但我还没有能够让它继续工作。

4 个答案:

答案 0 :(得分:5)

.off.on无法按预期工作。 .click方法和其他事件方法在后台使用.on方法来绑定处理程序。如果在没有任何特定处理程序的情况下调用.off方法,则删除(而不是临时禁用)特定事件的所有绑定处理程序。并且在不传递处理程序的情况下调用.on无效。

在您的情况下,您可以使用标志而不是操纵事件处理程序,这也比(重新)绑定和删除事件处理程序更有效。

答案 1 :(得分:1)

您可以使用解除绑定功能

$("#arrow1").click(function() {
 // $("#arrow2, #arrow3, #arrow4").off("click");
 $("#arrow2, #arrow3, #arrow4").unbind("click");
 // do my animations, then
 $("#arrow2, #arrow3, #arrow4").on("click");
}

http://api.jquery.com/unbind/

答案 2 :(得分:1)

尝试使用 unbind() 功能删除该事件。

  

说明:从元素中删除以前附加的事件处理程序。

$("#arrow1").unbind( "click" );

off() 功能也可以使用。

  

说明:删除事件处理程序。

$("#arrow1").off( "click" );

希望这有帮助。

答案 3 :(得分:1)

我要做的是从头开始设置一个布尔值isLoading = false。然后在函数执行时设置:

isLoading = true。如果isLoading == true,$(' button')。attr('禁用','禁用');否则启用它

完成后再将其更改为false。

对不起它的psudo代码,它只是我的头脑。