49 votes

Est-il possible de supprimer un gestionnaire d'événement spécifique d'un événement avec plusieurs gestionnaires ?

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 ?

84voto

Matt Ball Points 165937

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

Un démon sauvage est apparu !

Voir aussi : .unbind() docs .

60voto

Kevin Jurkowski Points 210

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.

4voto

Miqi180 Points 1318

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.

Fuente

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

Fuente

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X