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

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

这是我的jsfiddle:

的jsfiddle

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

 $(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); }); }); 

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

此外,您将喜欢.one()函数。

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

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

试试这个:

 $(document).ready(function(){ $('#click').click(function(){ $('#click').unbind('click'); $('#status').append("unbound "); setTimeout( function(){ $('#click').bind('click',function(){ }); $('#status').append("bound "); }, 2000 ); }); }); 

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

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

 
time out
$(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/

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