Quelle est la différence entre jQuery off () et unbind ()

J’utilisais jQuery .bind () et .unbind () pour gérer un événement d’animation avec défilement.

$(window).bind('scroll', function(){ ... code ... if(code_was_successful){ $(window).unbind(e); } }); 

À partir de la version 1.7 (j’utilise 1.11), nous sums supposés utiliser .on () et .off (), mais .off () ne semble pas avoir de support pour qu’un gestionnaire d’événement se délie. Pour les événements de clic normaux et autres, je devrais enregistrer le gestionnaire en une variable et configurer un autre gestionnaire d’événements pour le dissocier (ce qui annule l’objective), et pour les événements de défilement, il est impossible car .off () nécessite un sélecteur pour dissocier. un gestionnaire spécifique et les événements de défilement ne peuvent en avoir un.

Quelle est la manière moderne de faire cela?

Quelle est la manière moderne de faire cela?

Utilisez une expression de fonction nommée :

 $(window).on('scroll', function handler(){ ... code ... if(code_was_successful){ $(window).off('scroll', handler); } }); 

.off () nécessite un sélecteur pour dissocier un gestionnaire spécifique

Non. Tout comme .on ne nécessite pas de sélecteur. Vous n’avez besoin du sélecteur que si vous souhaitez dissocier un gestionnaire d’événements délégué.

Comme vous pouvez le lire dans la documentation de .off propos de l’argument de sélecteur:

Un sélecteur qui doit correspondre à celui initialement transmis à .on () lors de l’attachement de gestionnaires d’événements.

Donc, si vous n’en avez pas utilisé un dans .on , vous n’en utilisez pas un dans .off .

vous pouvez utiliser .on() et .off() comme ceci:

 function scrollHandler(e){ if (myCondition) $(e.target).off('scroll', scrollHandler); } $(window).on('scroll', scrollHandler);