0

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

所以,这里有一些例子:

在 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);

    }
});

但问题是被删除的函数将以任何方式执行((

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

4

2 回答 2

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/

于 2013-02-02T17:52:13.183 回答
2

您可以使用.one而不是.on. 这样,您的处理程序将只运行一次:

$("ul").one("click","a.button",function(){
   //... here some code or ajax request, whatever
   return false;
});
于 2013-02-02T17:50:21.900 回答