禁用单击事件处理程序一段时间

时间:2011-12-01 00:42:36

标签: javascript jquery bind settimeout unbind

我已经查看了类似的问题但提供的答案涉及按钮而不是div元素。当我单击id为click的div元素时,unbind()禁用click事件处理程序并将计时器设置为2秒。 2秒后,应由bind()再次启用click事件处理程序。问题是click事件处理程序似乎没有“反弹”。我将文本附加到另一个div元素以检查click事件处理程序是否处于活动状态。

这是我的jsfiddle:

jsfiddle

5 个答案:

答案 0 :(得分:14)

解决整个问题的另一种方法是不打扰解除绑定和重新绑定,只使用“禁用”标志:

$(document).ready(function(){

   var clickDisabled = false;
   $('#click').click(function(){
      if (clickDisabled)
         return;

      // do your real click processing here

      clickDisabled = true;
      setTimeout(function(){clickDisabled = false;}, 2000);
  });

});

答案 1 :(得分:1)

当您重新绑定函数时,第二次绑定所有代码的一部分 - 它只是输出绑定到状态,但它不包含任何第二次执行超时的代码

此外,您会喜欢.one()功能。

我在这里修改了你的代码:http://jsfiddle.net/eQUne/6/

function bindClick() {
    $('#click').one('click', function() {
        $('#status').append("bound ");
        setTimeout(bindClick, 2000);
    });
}

$(document).ready(function(){
    bindClick();
});

答案 2 :(得分:0)

试试这个:

$(document).ready(function(){

$('#click').click(function(){

    $('#click').unbind('click');
    $('#status').append("unbound ");

    setTimeout(
        function(){
            $('#click').bind('click',function(){

            });
            $('#status').append("bound ");           
        },
        2000
        );
    });
});

你拼错了setTimeout,你的“绑定”消息只在点击时附加。

答案 3 :(得分:0)

如果我得到了你正确的要求,这应该有效:

<div id="click" >time out</div>
<div id="status"></div>

$(document).ready(function() {
    $('#click').click(unbindme);

    $('#status').html('bound'); 

    function unbindme()
    {
        $('#click').unbind('click');
        $('#status').html('unbound');

        setTimeout(function(){
            alert('here');
            $('#status').html('bound'); 
            $('#click').click(unbindme);   
        }, 2000);
    }
}

请在此处查看:http://jsfiddle.net/eQUne/

答案 4 :(得分:0)

我回答你的问题,但只是不要自杀:))开玩笑......你的代码很好只是一个错字:setTimeOut应该是setTimeout(O应该是o)< / p>