我设置了旋转木马,我点击导航箭头的事件。单击它们时,我使用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");
}
但我还没有能够让它继续工作。
答案 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");
}
答案 2 :(得分:1)
尝试使用 unbind()
功能删除该事件。
说明:从元素中删除以前附加的事件处理程序。
$("#arrow1").unbind( "click" );
off()
功能也可以使用。
说明:删除事件处理程序。
$("#arrow1").off( "click" );
希望这有帮助。
答案 3 :(得分:1)
我要做的是从头开始设置一个布尔值isLoading = false。然后在函数执行时设置:
isLoading = true。如果isLoading == true,$(' button')。attr('禁用','禁用');否则启用它
完成后再将其更改为false。
对不起它的psudo代码,它只是我的头脑。