Javascript (jquery) – Plusieurs gestionnaires attachés à un événement: comment détacher un seul?

Dans ce module sur lequel je travaille, j'ai un auditeur à un événement «redimensionner» dans la fenêtre. Chaque fois que le module est exécuté, je dois vérifier s'il y a déjà un auditeur enregistré dans cet événement et le détacher, afin d'éviter les comportements indésirables, les fuites de mémoire et etc.

Jusqu'à présent, bon, mais, dans cette application sur laquelle nous travaillons, il est probable que certains gestionnaires sont déjà attachés à l'événement «redimensionner» et je ne peux pas appeler $(window).off('resize') , car cela Évacuez tous les autres gestionnaires d'événements précédemment enregistrés par d'autres plugins ou modules.

Étant donné cela, j'aimerais savoir s'il y a un moyen d'identifier mon manipulateur et de détacher tout ce que je me suis enregistré. Comment puis-je définir un identifiant sur mon gestionnaire d'événements afin d'être référencé dans la fonction .off() ?

Toute aide serait sympa.

Voici deux suggestions différentes. Vous pouvez soit donner un espace de noms à votre événement, soit passer une fonction anonyme anonyme lors de la liaison.

Exemple lors de l'utilisation de l'espace de noms:

 $(window).on('resize.event1', function(){}); $(window).on('resize.event2', function(){}); //Only turn off event 2 $(window).off('resize.event2'); 

JQuery vous permet d'identifier votre événement. Ce comportement s'appelle namespace. L'événement actuel et le nom de l'événement doivent être séparés par un point. Dans ce cas, je lierai 2 événements de redimensionnement (côté gauche du point), un avec le nom event1 et l'autre avec event2 .

En identifiant l'événement, vous pouvez supprimer (ou déclencher) un événement unique lorsqu'un objet a plusieurs fois le même événement.

 $(window).trigger('resize'); //Trigger both; $(window).trigger('resize.event2'); //Trigger event2; 

Exemple en utilisant les fonctions nommées:

 $(window).on('resize', function1); $(window).on('resize', function2); //Only turn off event 2 $(window).off('resize', function2); 

Associer une fonction non anonyme vous permet de supprimer l'événement si la fonction passée correspond à la fonction d'événement en cours. Parce que function2 === function2 , seule la seconde fonction sera supprimée puisque function1 !== function2 !

Si vous utilisez des gestionnaires nommés (par opposition à des fonctions anonymes), vous pouvez passer le nom du gestionnaire à off pour supprimer celui-ci ( http://api.jquery.com/off/ )

 function flash() { $( "div" ).show().fadeOut( "slow" ); } $( "body" ).off( "click", "#theone", flash ) 

Faites quelque chose comme ça,

 $(window).off('resize.myCustomEvent'); 

Et vice versa pour l'attacher