0

我在页面上有一个按钮,我希望每秒最多被触发一次。这意味着如果用户像疯子一样点击它五秒钟,它只会被执行五次。我一直在谷歌搜索和搜索堆栈,没有结果。还尝试了 Alman 的油门/去抖动插件,但似乎不适用于点击。

4

4 回答 4

1

使用计时器

 var clicked = false;
 setInterval(function(){
     clicked = false;
 },5000);

if($('.button').click(function(){
   if(!clicked){
      do job;
      clicked = true;
   }
});
于 2012-11-20T19:02:31.770 回答
0

为什么不在按钮的单击事件中禁用按钮 1 秒?

$('#my_button').click(function() {
    /*
    your logic here
    */

    // disable the button for 1 second
    $(this).attr('disabled', 'disabled').delay(1000).removeAttr('disabled');
} 
于 2012-11-20T19:01:01.127 回答
0

创建一个终止事件的节流阀,除非距离上一次单击已经 1 秒。

var clicked = false;
$(element).click(function(e){
    e.preventDefault();
    if (clicked) {
        return;
    }
    clicked = true;
    console.log("Do Stuff");
    setTimeout(function(){
        clicked = false;
    },1000);
});

或者您可以使用数据属性来避免额外的变量:

$(element).click(function(e){
    e.preventDefault();
    if ($(this).data("clicked")) {
        return;
    }
    $(this).data("clicked",true);
    console.log("Do Stuff");
    setTimeout(function(){
        $(this).data("clicked",false);
    },1000);
}).data("clicked",false);
于 2012-11-20T19:02:11.133 回答
0

试试这个:

$(function(){
    var currentTime = (new Date()).getTime();
    $("input:button").click(function(){
        var nowTime = (new Date()).getTime();
        var diff = Math.abs((nowTime - currentTime)/1000);

        if(diff < 1) 
            return;

        currentTime = nowTime;

        // do your stuff
    });
});
于 2012-11-20T19:09:26.447 回答