Как удалить все живые события jquery из виджета javascript

Я разрабатываю виджет javascript, который загружается на многих других сайтах.

Когда виджет загружается, я привязываю живое событие jquery к ссылкам и кнопкам. Например:

$('.my-submit').live('click', function() {...});
...
$('.my-link').live('click', function() {...});

Итак, вопрос в том, как я могу удалить все живые события только для ссылок и кнопок виджета?


person cackle    schedule 19.12.2011    source источник


Ответы (4)


Простой способ сделать это — связать пространство имен и удалить все события пространства имен:

$('.my-submit').live('click.myPlugin', function() {...});

Затем вы можете вызвать die с пространством имен:

$('.my-submit').die('click.myPlugin'); // only myPlugin events are removed

Еще лучше использовать on и off появилась в jQuery 1.7. Это гораздо лучший способ обработки событий привязки и отвязки:

$(document).on('click.myPlugin', '.my-submit', function() {...}))
           .on('click.myPlugin', '.my-link', function() {...}));

$(document).off('click.myPlugin'); // remove all myPlugin functions
person lonesomeday    schedule 19.12.2011

Начиная с jQuery 1.7, метод .live() устарел. Используйте .on() для присоединения обработчиков событий. Пользователи более старых версий jQuery должны использовать .delegate() вместо .live().

Сами точки отсчета jQuery:

Из jQuery

Используйте или делегируйте, и это не проблема.

person Tim Wickstrom    schedule 19.12.2011

Вы можете попробовать метод JQuery.unbind(). Вы бы использовали это так:

$.('.my-link').unbind('click');

Надеюсь это поможет.

person Simon H    schedule 19.12.2011

Вы хотите использовать .die():

Удалите все обработчики событий, ранее прикрепленные с помощью .live() к элементам.

Источник: http://api.jquery.com/die/

Кстати, вам следует перейти от использования .live() к .delegate() (или .on() в зависимости от вашей версии jQuery), поскольку это улучшит производительность, а .live() устарело с jQuery 1.7.

$(<selector>).live(<event>, <handler>);

такой же как:

$(document).delegate(<selector>, <event>, <handler>);

Преимущество использования .delegate() заключается в том, что вы можете выбрать свой корневой элемент (вы не обязаны использовать document).

Некоторые документы для вас:

person Jasper    schedule 19.12.2011
comment
Если вы используете jQuery 1.7+, я бы изменил порядок приоритетов, который предлагает Джаспер, - перейдите прямо к .on() вместо .delegate(), поскольку последний является псевдонимом первого, который, скорее всего, сам по себе устарел в будущем. - person Greg Pettit; 20.12.2011