有時候,我們需要停用以前注冊的事件處理程序?赡苁且驗轫撁娴臓顟B發生了變化,導致相應的操作不再有必要。處理這種情形的一種典型做法,就是在事件處理程序中使用條件語句。但是,如果能夠完全移除處理程序綁定顯然更有效率。
假設我們希望折疊樣式轉化器在頁面沒有使用正常樣式的情況下保持擴展狀態,即NarrowColumn或Large Print按鈕被選中時,單擊樣式轉換器的背景區域不應該引發任何操作。為此,可以在單擊非默認樣式轉換按鈕時,調用.unbind()方法移除折疊處理程序,代碼如下所示:
$(document).ready(function(){
$("#switcher").click(function(event){
if(!$(event.target).is('button')){
$("#switcherbutton").toggleClass('hidden');
}
});
$("#switcher-narrow,#switcher=large").click(function(){
$("#switcher").unbind('click');
});
});
現在,如果單擊NarrowColumn按鈕,樣式轉換器(<div>)上的單擊處理程序就會被移除。然后,再單擊背景區域將不會導致它折疊起來。但是,按鈕本身的作用失效了!由于為使用事件委托而重寫了按鈕處理程序,因此按鈕本身也帶有樣式轉化器(<div>)的單擊事件處理程序。換句話說,在調用$("#switcher").unbind('click')時,會導致按鈕上綁定的兩個事件處理程序被移除。