Книга: JavaScript. Подробное руководство, 6-е издание

19.4.5. Удаление обработчиков событий

19.4.5. Удаление обработчиков событий

После регистрации обработчика событий с помощью метода bind() (или с помощью простых методов регистрации обработчиков) его можно удалить с помощью метода unbind(), чтобы предотвратить его вызов при появлении событий в будущем. (Обратите внимание, что метод unbind() удаляет только обработчики, зарегистрированные методом bind() и родственными ему методами объекта jQuery. Он не удаляет обработчики, зарегистрированные с помощью метода addEventListener() или attachEvent(), а также не удаляет обработчики, объявленные в атрибутах элементов, таких как onclick и onmouseover.) При вызове без аргументов метод unbind() удалит все обработчики событий (для всех типов событий) из всех выбранных элементов в объекте jQuery:

$("*").unbind(); // Удалит все обработчики событий из всех элементов!

При вызове с единственным строковым аргументом он удалит все обработчики указанного типа события (или типов, если строка содержит несколько имен) из всех выбранных элементов в объекте jQuery:

// Удалить все обработчики событий mouseover и mouseout во всех элементах <а>
$('а').unbind("mouseover mouseout");

Это не самый лучший подход, и его не следует использовать при разработке модулей, потому что пользователь модуля может использовать другие модули, регистрирующие свои собственные обработчики этих же типов событий в тех же элементах. Однако если модуль будет регистрировать обработчики событий с использованием пространств имен, можно будет использовать эту версию вызова метода unbind() с одним аргументом для удаления только обработчиков события из вашего пространства или пространств имен:

// Удалить все обработчики событий mouseover и mouseout в пространстве имен "myMod"
$('а').unbind("mouseover.myMod mouseout.myMod");
// Удалить только обработчики событий из пространства имен myMod
$( a').unbind(”.myMod”);
// Удалить обработчик события click из пространств имен "ns1" и "ns2"
$('а').unbind("click.ns1.ns2");

Если потребуется удалить только те обработчики событий, которые были зарегистрированы вами, и вы не использовали пространства имен, вы должны получить ссылки на функции обработчиков событий и использовать версию вызова метода unbind() с двумя аргументами. В этом случае в первом аргументе передается строка с типом события (без указания пространств имен), а во втором - функция-обработчик:

$('flmybutton').unbind('click', myClickHandler);

При вызове метода unbind() таким способом он удалит указанный обработчик указанного типа (или типов) события из всех выбранных элементов в объекте jQuery. Обратите внимание, что обработчики событий могут удаляться версией метода unbind() с двумя аргументами, даже когда они были зарегистрированы с дополнительными данными, с помощью версии метода bind(), принимающей три аргумента.

Методу unbind() можно также передавать объект в единственном аргументе. В этом случае метод unbind() будет вызываться рекурсивно для каждого свойства объекта. Имена свойств этого объекта должны определять типы событий, а значения -функции обработчиков:

$('а').unbind({ // Удалить конкретные обработчики событий mouseover и mouseout
  mouseover: mouseoverHandler.
  mouseout: mouseoutHandle г
});

Наконец, существует еще один способ вызова метода unbind(). Если передать ему объект Event, созданный библиотекой jQuery, он удалит обработчики событий, которым будет передано это событие. Вызов unbind(ev) эквивалентен вызову unbind(ev.type, ev.handler).

Оглавление книги


Генерация: 1.595. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз