如何解除绑定或防止在函数运行时发生其他单击事件
How do I unbind or prevent other click events from occurring while my function is running?
我设置了一个旋转木马,并将单击事件绑定到导航箭头。当它们被点击时,我使用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。
对不起,这是伪代码,这只是我的头。
- 使用压缩的JavaScript文件(不是运行时压缩)
- 如何在运行时在angular 2中加载外部js脚本
- JavaScript错误:Microsoft JScript运行时错误:应为对象
- Google 脚本:用于创建日历活动的脚本运行时不会出错,但不会执行任何操作
- http.listen()在运行时接受终端命令
- 自定义运行时Can'在谷歌应用引擎中看不到我的自定义日志
- 实现比较方法的最佳实践是什么;s的比较类型是在运行时选择的
- JavaScript运行时是如何工作的
- 在运行时创建元素时移到一边时出错
- 如何在运行时在HTML5画布中绘制正方形
- 如何在运行时使用javascript隐藏图像
- 在运行时使用jquery准备表体会导致设计问题
- 使用主题运行时portlet liferay时出现Javascript错误
- JavaScript运行时事件循环现有技术
- Appcelerator Titanium:在运行时下载并解释JavaScript代码
- angularjs ng点击运行时标记不起作用
- 如何在运行时向计算可观察量添加其他数组项
- 当其他功能正在运行时,单击按钮触发
- 在其他进程运行时更改 dom 元素
- 如何解除绑定或防止在函数运行时发生其他单击事件