Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 挂起事件侦听器_Javascript_Css_Animation_Mootools - Fatal编程技术网

Javascript 挂起事件侦听器

Javascript 挂起事件侦听器,javascript,css,animation,mootools,Javascript,Css,Animation,Mootools,我有一个带有onclick事件监听器的按钮(在MooTools中)。它很好用。但是,我希望能够使按钮在特定时间不可用,并在必要时再次可用 简单地说:我想“挂起”事件侦听器。这能做到吗?MooTools文档仅用于添加、删除、克隆和传播事件。暂时不要“忽视”他们 我知道解决办法可能在其他地方: 使用一些css隐藏按钮,例如,$('button').setStyle('visibility','hidden'),稍后再显示 一些覆盖,再次隐藏原始元素,并显示替换(例如,灰显按钮) 克隆元素,从原始元素

我有一个带有
onclick
事件监听器的按钮(在MooTools中)。它很好用。但是,我希望能够使按钮在特定时间不可用,并在必要时再次可用

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

我知道解决办法可能在其他地方:

  • 使用一些css隐藏按钮,例如,
    $('button').setStyle('visibility','hidden')
    ,稍后再显示
  • 一些覆盖,再次隐藏原始元素,并显示替换(例如,灰显按钮)
  • 克隆元素,从原始元素中删除所有事件(使按钮“不可用”),然后用克隆替换原始元素(从而使其再次可用)
  • 让附加到事件侦听器的函数检查按钮是否可用
  • 然而,这有点离题了,似乎比必要的时候更详细。我的问题是,如果以及如何控制事件侦听器,基本上是:我可以挂起它吗

    编辑:


    我想答案是“不”。这意味着要做上面提到的四件事中的一件,或者我接受的答案中提到的:禁用button HTML元素,从而暂停对事件侦听器的响应。

    我会看到两种方法:

  • 禁用该元素。当元素处于禁用状态时,它的事件侦听器将被禁用
  • 删除事件侦听器。这意味着您必须在想要再次启用它时重新添加它。这意味着您可以添加代码以在函数中添加事件,从而使其可重用

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

  • 禁用该元素。当元素处于禁用状态时,它的事件侦听器将被禁用
  • 删除事件侦听器。这意味着您必须在想要再次启用它时重新添加它。这意味着您可以添加代码以在函数中添加事件,从而使其可重用

  • 如果库不支持挂起事件,另一个选项是,当您想忽略它时,只需设置一个标志,然后在函数开始时检查它:

    function doStuff() {
        if (myFlag) {
            return;
        }
    }
    

    如果库不支持挂起事件,另一个选项是,当您想忽略它时,只需设置一个标志,然后在函数开始时检查它:

    function doStuff() {
        if (myFlag) {
            return;
        }
    }
    

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

    在我看来,处理问题的正确方法是在“按钮”中添加一个css类(请记住,您可以根据需要添加任意数量的类) (其中button可以是任何类型的元素)并使用如下解决方案检查click处理程序中是否存在该类:

    $('button.one').addEvent('click', function(){
       if(this.hasClass('disabled'))return;    
       alert('You just clicked me, guy!');
    });
    
    Element.Events.enabledClick = {
    base:'click',
    condition: function(event){
         var trigger = true;
         if(this.hasClass('disabled')){
            trigger = false;
         }
         return trigger;
    }};
    
    如本例所示:

    另一个路径是添加如下自定义事件:

    $('button.one').addEvent('click', function(){
       if(this.hasClass('disabled'))return;    
       alert('You just clicked me, guy!');
    });
    
    Element.Events.enabledClick = {
    base:'click',
    condition: function(event){
         var trigger = true;
         if(this.hasClass('disabled')){
            trigger = false;
         }
         return trigger;
    }};
    
    因此,每当您需要将事件处理程序置于休眠状态时,只需在需要的按钮上添加一个“disabled”类,然后将其忘记,要重新启用事件,只需删除“disabled”类, 您只需使用addEvent('enabledClick',…)而不是addEvent('click',…)

    在这把小提琴上使用与上述相同的示例,使用以下技术:

    在我的示例中,我刚刚使用css中的.disabled类将按钮样式设置为disabled,但如果您希望使其消失,可以使用tween设置不透明度:


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

    在我看来,处理问题的正确方法是在“按钮”中添加一个css类(请记住,您可以根据需要添加任意数量的类) (其中button可以是任何类型的元素)并使用如下解决方案检查click处理程序中是否存在该类:

    $('button.one').addEvent('click', function(){
       if(this.hasClass('disabled'))return;    
       alert('You just clicked me, guy!');
    });
    
    Element.Events.enabledClick = {
    base:'click',
    condition: function(event){
         var trigger = true;
         if(this.hasClass('disabled')){
            trigger = false;
         }
         return trigger;
    }};
    
    如本例所示:

    另一个路径是添加如下自定义事件:

    $('button.one').addEvent('click', function(){
       if(this.hasClass('disabled'))return;    
       alert('You just clicked me, guy!');
    });
    
    Element.Events.enabledClick = {
    base:'click',
    condition: function(event){
         var trigger = true;
         if(this.hasClass('disabled')){
            trigger = false;
         }
         return trigger;
    }};
    
    因此,每当您需要将事件处理程序置于休眠状态时,只需在需要的按钮上添加一个“disabled”类,然后将其忘记,要重新启用事件,只需删除“disabled”类, 您只需使用addEvent('enabledClick',…)而不是addEvent('click',…)

    在这把小提琴上使用与上述相同的示例,使用以下技术:

    在我的示例中,我刚刚使用css中的.disabled类将按钮样式设置为disabled,但如果您希望使其消失,可以使用tween设置不透明度:


    我已经将Twitter Bootstrap Button.js移植到mootools,或者从mootools forge移植到mootools。JSFIDLE演示-它提供了各种方法来禁用按钮,可以通过调用(附加禁用的属性+css类)或者在单击一段时间后禁用。也许你可以使用这些。有趣的东西。这是真正的“管理”你的按钮,而不仅仅是在按钮上添加一个
    onclick
    来做一些事情。然而,我真的不需要更多。不过,为了将来的发展,我会记住这一点。谢谢。我已经将Twitter Bootstrap Button.js移植到mootools,或者从mootools forge移植到了mootools。JSFIDLE演示-它提供了各种方法来禁用按钮,可以通过调用(附加禁用的属性+css类)或者在单击一段时间后禁用。也许你可以使用这些。有趣的东西。这是真正的“管理”你的按钮,而不仅仅是在按钮上添加一个
    onclick
    来做一些事情。然而,我真的不需要更多。不过,为了将来的发展,我会记住这一点。谢谢。我不想删除并重新添加侦听器,这可能会变得很混乱。选项1看起来是个不错的主意,尽管它不是直接指向侦听器,但它是通过HTML实现的。但是,我的按钮目前封装在一个
    中,因此我应该将其设置为
    ,但这更正确(更好?)