正在挂起事件侦听器

Suspending event listeners

本文关键字:侦听器 事件 挂起      更新时间:2023-09-26

我有一个按钮,附带了一个onclick事件侦听器(在MooTools中)。它运行良好。但是,我希望能够使按钮在某个时间不可用,并在必要时再次可用。

简单地说:我想"挂起"事件侦听器。这能做到吗?MooTools文档只涉及事件的添加、删除、克隆和传播。暂时不要"忽视"他们。

我知道这个问题的解决方案可能在其他地方:

  1. 用一些css隐藏按钮,例如$('button').setStyle('visibility', 'hidden'),稍后再显示
  2. 一些覆盖,再次隐藏原始元素,并显示替换(例如灰色按钮)
  3. 克隆元素,从原始元素中删除所有事件(使按钮"不可用"),然后用克隆替换原始元素(从而使其再次可用)
  4. 让附加到事件侦听器的函数检查按钮是否可用

然而,这有点离题,似乎比必要的更详细。我的问题是,我是否以及如何控制事件侦听器,基本上是:我可以暂停它吗?

编辑:

我想答案是否定的。这意味着要做上面提到的四件事之一,或者正如我接受的答案中提到的那样:禁用按钮HTML元素,从而挂起对事件侦听器的响应。

我认为有两种方法可以做到这一点:

  1. 禁用元素。当元素具有disabled状态时,将禁用该元素上的事件侦听器
  2. 删除事件侦听器。这意味着一旦你想再次启用它,就必须重新添加它。这意味着您可以添加代码以在函数中添加事件,从而使其可重用

虽然您已经找到了解决方案,并且这里的一些答案似乎给了您很好的建议,但我还是完整地写了这篇文章。

而在我看来,处理问题的正确方法是在你的"按钮"中添加一个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;
    }
}