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).