取消註冊一個或多個事件處理程序。
如果省略了處理程序,則爲該eventName的元素註銷所有事件處理程序。如果eventName也被忽略,則註銷元素上的所有事件處理程序。 (在每種情況下,只能通過影響原型註冊的處理程序。) 例子
假設:
$('foo').observe('click', myHandler);
...我們能停止使用該處理程序,像這樣觀察:
$('foo').stopObserving('click', myHandler);
如果我們想要從'foo'中刪除所有'click'處理程序,我們離開處理程序參數:
$('foo').stopObserving('click');
如果我們要刪除所有處理程序從「富」(或許我們即將從DOM中刪除)的所有事件中,我們簡單地忽略這兩個處理程序和事件名稱:
$('foo').stopObserving();
一個常見的錯誤
當使用實例方法作爲觀察員,這是常見的對他們的使用功能#綁定,例如:
$('foo').observe('click', this.handlerMethod.bind(this));
如果你這樣做,這是不行的註銷處理程序:
$('foo').stopObserving('click', this.handlerMethod.bind(this)); // <== WRONG
函數#綁定每次調用時都會返回一個新函數,所以如果不保留觀察時使用的引用,則不能特別解除該函數的解除綁定。 (您仍然可以解開元素上一個事件的所有處理,或所有的處理程序完全。)
要做到這一點,你需要一個參考保留給綁定功能:
this.boundHandlerMethod = this.handlerMethod.bind(this);
$('foo').observe('click', this.boundHandlerMethod);
...和然後刪除:
$('foo').stopObserving('click', this.boundHandlerMethod); // <== Right