2011-12-01 32 views
3

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

这里是我的jsfiddle:

jsfiddle

回答

11

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

$(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

当你重新绑定功能要绑定只是所有代码的一个子集,第二次 - 绑定状态所做的只是输出,但它不包含任何第二次执行超时的代码。

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

我在这里搞掂代码:http://jsfiddle.net/eQUne/6/

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

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

试试这个:

$(document).ready(function(){ 

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

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

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

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

你拼错setTimeout和你的 “绑定” 消息正在仅在点击追加。

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/

0

我回答你的问题,但就是不杀自己:))开玩笑...您的代码是罚款只是一个错字:setTimeOut应该setTimeout(将O应该是O)

相关问题