2011-12-01 33 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)

相關問題