Отмена регистрации одного или нескольких обработчиков событий.
Если обработчик опущен, отменяется регистрация всех обработчиков событий в элементе для этого eventName. Если eventName также опущено, отменяется регистрация всех обработчиков событий в элементе. (В каждом случае влияет только на обработчики, зарегистрированные через Prototype.)
Примеры
Предполагая, что:
$('foo').observe('click', myHandler);
... мы можем перестать наблюдать, используя этот обработчик, например:
$('foo').stopObserving('click', myHandler);
Если мы хотим удалить все обработчики 'click' из 'foo', мы пропускаем аргумент обработчика:
$('foo').stopObserving('click');
Если мы хотим удалить все обработчики для всех событий из 'foo' (возможно, мы собираемся удалить его из DOM), мы просто опускаем и обработчик, и имя события:
$('foo').stopObserving();
Распространенная ошибка
При использовании методов экземпляра в качестве наблюдателей обычно используется функция # связать с ними, например ::
$('foo').observe('click', this.handlerMethod.bind(this));
Если вы сделаете это, это не поможет отменить регистрацию обработчика:
$('foo').stopObserving('click', this.handlerMethod.bind(this)); // <== WRONG
Функция # bind возвращает новую функцию каждый раз, когда она вызывается, и поэтому, если вы не сохраните ссылку, использованную при наблюдении, вы не сможете отсоединить эту функцию специально. (Вы все еще можете отцепить все обработчики для события или все обработчики для элемента полностью.)
Для этого вам нужно сохранить ссылку на связанную функцию:
this.boundHandlerMethod = this.handlerMethod.bind(this);
$('foo').observe('click', this.boundHandlerMethod);
... а затем удалить:
$('foo').stopObserving('click', this.boundHandlerMethod); // <== Right