Как да премахнете всички jquery събития на живо от javascript widget

Разработвам някаква 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+, бих обърнал реда на приоритет, който Jasper предлага - отидете директно на .on() вместо .delegate(), тъй като последният е псевдоним на първия, който е по-вероятно да бъде отхвърлен в бъдеще. - person Greg Pettit; 20.12.2011