停止在JS中执行委托函数

时间:2013-02-02 17:48:03

标签: javascript jquery javascript-events

首先,感谢您阅读。
我确实有问题要停止执行功能,我会尝试解释我想做什么以及我是如何做到的。
例如,我绑定元素a or button上的一些事件,我想用户不会再次点击它,我的意思是他可以点击它,但是所有的动作都不会被调用一段时间(比如一秒钟)。

所以,这里有一些例子:

in html

1st example 
<ul>
   <li><a href="some url" class='button'>Click me</a></li>
   <li><a href="some url" class='button'>Click me</a></li>
   <li><a href="some url" class='button'>Click me</a></li>
</ul>

2nd example somewhere else:
<section id='someid'>
   some info
   some articles - doesn't matter
   <button class='button iLoadComments'>Load more comments</button>
</section>

在javascript中:

$("ul").on("click","a.button",function(){
   ... here some code or ajax request, whatever
   return false;
});
$("section").on("click","iLoadComments",function(){
   ... some ajax request
   return false;
})

我想不允许执行它。 我希望通过1个函数覆盖所有代码..

所以,我做了什么:全局我定义了新的事件监听器并将属性disabled添加到该元素

$("body").on("mousedown", ".button", function(e){
    var $this=$(this);
    if ($this.attr("disabled")) {
        var event = e || window.event;
        if (event.stopPropagation) {
                event.stopPropagation();
        } else {
                event.cancelBubble = true;
        }
        event.preventDefault();
        setTimeout(function () {
           $this.removeAttr("disabled");
        }, 1000); 
        return false;
    }else{
       $this.attr("disabled", true);

    }
});

但问题是删除功能会以任何方式执行((

有人可以帮忙吗,这是更好的做法吗?或纠正这种方式?

2 个答案:

答案 0 :(得分:3)

var click_enabled  = true;
$("body").on("click",".button",function(){
   if (click_enabled) {
        click_enabled = false;
        setTimeout(function() {
            click_enabled =  true;
        }, 1000);
   } 
   return false;
});

$("ul").on("click","a.button",function(){
    if (!click_enabled)
        return false;
   //... here some code or ajax request, whatever
});
$("section").on("click",".iLoadComments",function(){
    if (!click_enabled)
        return false;
   //... some ajax request
});

http://jsfiddle.net/EAhK4/

答案 1 :(得分:2)

您可以使用.one代替.on。这样,您的处理程序将只运行一次:

$("ul").one("click","a.button",function(){
   //... here some code or ajax request, whatever
   return false;
});