En cherchant la solution d'un problème que j'ai en ce moment, j'ai trouvé ce fil de discussion : jQuery : plus d'un gestionnaire pour un même événement . Je me demande maintenant s'il est possible de supprimer un seul de ces gestionnaires ?
Réponses
Trop de publicités?Il est possible, si vous Ne le fais pas. utiliser des callbacks anonymes :
var $elt = $(...);
function clickHandler1(event){...}
function clickHandler2(event){...}
// bind both
$elt.click(clickHandler1);
$elt.click(clickHandler2);
// unbind just the first
$elt.unbind('click', clickHandler1);
Voir aussi : .unbind()
docs .
En fait, vous pouvez le faire en utilisant des rappels anonymes via l'espacement des noms d'événements :
$elt.bind('click.handler1', function(event) {
alert('click handler 1');
});
$elt.unbind('click.handler1');
Voir la démo modifiée ici .
Et ici pour plus d'informations.
Cela a été ajouté dans jQuery 1.4.3 qui est en fait sorti plus de 4 mois avant que la question ne soit posée.
Ce post date d'il y a des lustres, alors j'ai pensé que je pourrais vous expliquer comment cela se passe aujourd'hui (2019).
La plupart des anciennes réponses ci-dessus, y compris la réponse acceptée (qui était correcte à l'époque où elle a été écrite), utilisent l'attribut unbind
qui a été dépréciée depuis la version 3.0 de jQuery.
Depuis la version 3.0 de jQuery, .unbind() a été déprécié. Elle a été remplacée par la méthode .off() depuis jQuery 1.7, son utilisation était donc déjà découragée.
Voici comment procéder avec le .off()
méthode :
var foo = function() {
// Code to handle some kind of event
};
// ... Now foo will be called when paragraphs are clicked ...
$( "body" ).on( "click", "p", foo );
// ... Foo will no longer be called.
$( "body" ).off( "click", "p", foo );
Cela fonctionnera pour tous les gestionnaires d'événements mis en œuvre avec l'option .on()
et cela fonctionne également pour les gestionnaires d'événements non délégués. Remplacez simplement "body" par votre sélecteur d'élément et supprimez le deuxième paramètre de la méthode .off()
("p" dans l'exemple ci-dessus).