16 votes

jQuery : comment délier un événement lié à un objet document ?

J'ai une bibliothèque mal programmée qui fait ceci

$(document).on('click','#keep_first_only_button', function(){

Après cela, j'ai écrit un bout de code pour "passer outre" ce mauvais comportement

$("keep_first_only_button").unbind("click");
$("keep_first_only_button").on("click", selectKeepFirstOfAll);

MAIS cela ne fonctionne pas, alors le gestionnaire de fonction document.click est déclenché à nouveau

Je ne peux pas délier tous les événements de clic du document, parce que les catastrophes se produiront dans la page.

Quelle est la bonne façon de procéder dans cette situation ?

EDIT : Désolé pour la question de perte de temps, je n'avais pas vu le '#' manquant dans mon sélecteur. Je suis vraiment désolé !

31voto

Mattias Buelens Points 7690

Le gestionnaire d'événement original était lié en tant que délégué vous ne pouvez donc pas l'enlever de l'événement $('#keep_first_only_button') même. Vous devez l'enlever sur le document niveau.

En la documentation :

Pour supprimer des gestionnaires d'événements délégués spécifiques, il convient de fournir un fichier selector argument. La chaîne du sélecteur doit e .on() lorsque le gestionnaire d'événement a été attaché. Pour supprimer tous les gestionnaires d'événements délégués d'un élément sans supprimer les événements non délégués, utilisez l'option valeur spéciale "**" .

En d'autres termes, pour délier un événement délégué, il suffit d'utiliser les mêmes arguments que ceux utilisés pour le lier, mais de les passer à off au lieu de cela. Comme la fonction liée est anonyme, vous ne pouvez pas y faire référence, vous devrez donc vous contenter de la délier. tous les gestionnaires d'événements délégués liés à #keep_first_only_button sur le document niveau :

$(document).off('click', '#keep_first_only_button');

EDITAR: Il semblerait que le problème ne soit dû qu'à l'absence de hachage. Bizarre, je pensais qu'il n'était pas possible de délier les gestionnaires d'événements délégués à l'aide d'un élément régulière .off() appeler...

7voto

dKen Points 1039
$("#keep_first_only_button")...

Vous avez manqué le hachage ?

5voto

Trey Tyler Points 137

Pour ceux qui se posent la question, Mattias Buelens a raison.

Si l'élément est lié comme

$(document).on("click","#element",function(){ });

Si vous voulez l'éteindre plus tard, vous devez le faire comme :

 $("#element").click(function(e) { 
    $(document).off('click', '#element'); 
});

0voto

Damith Asanka Points 611

Si vous voulez supprimer un événement sans tenir compte du sélecteur, utilisez

$(document).off("click", "**") ;

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