Как удалить все живые события jquery из виджета JavaScript - PullRequest
0 голосов
/ 20 декабря 2011

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 20 декабря 2011

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

$('.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
1 голос
/ 20 декабря 2011

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

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

От jQuery

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

0 голосов
/ 20 декабря 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).

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

0 голосов
/ 20 декабря 2011

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

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

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

...