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

How do I unbind or prevent other click events from occurring while my function is running?

本文关键字:运行时 其他 事件 单击 函数 何解 绑定      更新时间:2023-09-26

我设置了一个旋转木马,并将单击事件绑定到导航箭头。当它们被点击时,我使用jQuery animate在下一个旋转幻灯片的元素中添加动画,并且由于动画的性质,我使用了几次setTimeout()

我有一个bug,如果我点击一个箭头,然后快速点击上一个或下一个箭头,动画会因为超时而困惑(这在这个项目中是必要的),在屏幕上什么也不呈现。我已经研究了一段时间,我认为最好的方法可能是防止其他箭头被点击,直到当前动画完成。

每个箭头由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");
}

但是我还没能让这个工作。

.off.on不像您期望的那样工作。.click方法和其他事件方法在幕后使用.on方法来绑定处理程序。当在没有任何特定处理程序的情况下调用.off方法时,它将移除(而不是临时禁用)特定事件的所有绑定处理程序。调用.on而不传递处理程序是没有效果的。

在你的情况下,你可以使用一个标志来代替操作事件处理程序,这也比(重新)绑定和删除事件处理程序更有效。

您可以使用unbind函数

$("#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/

尝试使用 unbind() 函数,它应该删除事件。

Description:从元素中删除先前附加的事件处理程序。

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

off() 函数也应该可以工作。

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

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

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

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

完成后,将其更改回false。

对不起,这是伪代码,这只是我的头。