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