正在挂起事件侦听器
Suspending event listeners
我有一个按钮,附带了一个onclick
事件侦听器(在MooTools中)。它运行良好。但是,我希望能够使按钮在某个时间不可用,并在必要时再次可用。
简单地说:我想"挂起"事件侦听器。这能做到吗?MooTools文档只涉及事件的添加、删除、克隆和传播。暂时不要"忽视"他们。
我知道这个问题的解决方案可能在其他地方:
- 用一些css隐藏按钮,例如
$('button').setStyle('visibility', 'hidden')
,稍后再显示 - 一些覆盖,再次隐藏原始元素,并显示替换(例如灰色按钮)
- 克隆元素,从原始元素中删除所有事件(使按钮"不可用"),然后用克隆替换原始元素(从而使其再次可用)
- 让附加到事件侦听器的函数检查按钮是否可用
然而,这有点离题,似乎比必要的更详细。我的问题是,我是否以及如何控制事件侦听器,基本上是:我可以暂停它吗?
编辑:
我想答案是否定的。这意味着要做上面提到的四件事之一,或者正如我接受的答案中提到的那样:禁用按钮HTML元素,从而挂起对事件侦听器的响应。
我认为有两种方法可以做到这一点:
- 禁用元素。当元素具有
disabled
状态时,将禁用该元素上的事件侦听器 - 删除事件侦听器。这意味着一旦你想再次启用它,就必须重新添加它。这意味着您可以添加代码以在函数中添加事件,从而使其可重用
虽然您已经找到了解决方案,并且这里的一些答案似乎给了您很好的建议,但我还是完整地写了这篇文章。
而在我看来,处理问题的正确方法是在你的"按钮"中添加一个css类(记住,你可以随心所欲地添加任何数量的类)(其中按钮可以是任何类型的元素),并使用这样的解决方案检查点击处理程序中是否存在该类:
$('button.one').addEvent('click', function(){
if(this.hasClass('disabled'))return;
alert('You just clicked me, guy!');
});
如本例所示:
http://jsfiddle.net/kentaromiura/CUeC4/
另一条路径是添加一个自定义事件,如以下事件:
Element.Events.enabledClick = {
base:'click',
condition: function(event){
var trigger = true;
if(this.hasClass('disabled')){
trigger = false;
}
return trigger;
}};
因此,每当你需要让事件处理程序进入睡眠状态时,你只需在你需要的按钮上添加一个"disabled"类,然后忘记了它,要重新启用事件,只需删除"disabled)类,您只需使用addEvent('enabledClick',…)而不是addEvent('点击'
在这个小提琴上,使用与上面相同的例子,使用这种技术:http://jsfiddle.net/kentaromiura/yUnqw/
在我的例子中,我刚刚使用css中的.disabled类将按钮设置为disabled,但如果你想让它消失,你可以使用tween来设置不透明度:
http://jsfiddle.net/kentaromiura/KLqAc/
如果库不支持挂起事件,另一种选择是在您想要忽略它时只设置一个标志,然后在函数开始时检查它:
function doStuff() {
if (myFlag) {
return;
}
}
- 如何在for循环中添加事件侦听器
- 未命中服务器发送的事件侦听器
- 如何覆盖原型中的事件侦听器
- 无法将事件侦听器附加到画布
- 如何在d3.js中自定义事件侦听器
- 在es6中,将带有回调的事件侦听器设置为可迭代的
- 事件侦听器未在chrome扩展中的options.js中启动
- IE8更改文本区域上的事件侦听器不工作
- 将事件侦听器添加到文档,而不是签入元素存在,然后添加事件侦听器
- javascript删除事件侦听器
- 我应该/如何清除mousemove JQuery事件侦听器
- 在JQuery中使用谷歌地图Api事件/侦听器
- 如何使用我的Jquery代码创建委托事件侦听器
- 'mousemove'画布中的事件侦听器-指针仅在最后一个矩形中更改
- 为什么此事件侦听器不工作
- 仅当类存在于Javascript中时才允许侦听器事件运行
- 不确定Google Maps的侦听器事件中值为何未定义
- 如何向控件添加侦听器事件
- 无法在地图单击侦听器事件上显示另一个地图
- Chrome运行时OnMessage侦听器事件未启动