2014-03-06 64 views
7

我想在觸發事件時刪除事件處理程序。我不能使用one(),因爲有些情況下我不想刪除事件處理程序。這就是我的意思是:刪除JQuery中的當前事件處理程序?

$('#a').on('click',function(){ 
    if(...) 
    // remove current event handler 
}); 

編輯:我忘了提,有連接到$('#a')其他事件處理程序。我只想刪除當前的一個。

+0

嘗試在Google中寫入相同的問題 – sanjeev

回答

20

使用.off(),名稱爲間隔event names

$('#a').on('click.myevent', function() { 
    if (...) 
    // remove current event handler 
    $(this).off('click.myevent') 
}); 
+0

什麼是'click.myevent'。請鏈接我描述的鏈接... –

+1

@RajaprabhuAravindasamy它是[namespaced event names](http://api.jquery.com/on/#event-names) - 用於確保我們不會解除綁定其他單擊事件處理程序 –

+0

這將刪除具有該名稱空間的所有事件。這意味着'myevent'必須是唯一的標識符。 –

-1

能否請您試試這個:

$('#a').on('click',function(){ 
    if(...) 
    { 

    $(this).unbind('click'); or $(this).off('click') 
}  

}); 

綁定和取消綁定是爲了向後兼容。你應該開/關分離或附加的事件處理程序

希望這有助於..

+2

這將刪除所有'click'事件處理程序。 OP只想刪除特定的處理程序。 – toxalot

6

內本身解除綁定的事件處理程序:

$("#a").on("click", function(evt){ 
    if (...) 
    { 
     $(this).off(evt); 
    } 
}); 

它不是在.off()很好的記錄,但是您可以從.unbind()的「使用事件對象」一節中閱讀關於此「第三種形式」的更好解釋。