jQuery: Unbind des gestionnaires d'événements pour les lier de nouveau plus tard
Quelqu'un sait comment faire pour supprimer la liaison de définir des gestionnaires d'événements, mais de les mémoriser afin de lier encore plus tard? Des suggestions?
- Avez-vous les événements ont une même fonction de gestionnaire? ou tous différents.
- il ne devrait pas être la question. Disons qu'ils sont tous différents et je ne sais pas quels sont-ils
Vous devez vous connecter pour publier un commentaire.
Il y a un élément événements dans les données de l'élément. Cela devrait obtenir votre commencé, vous pouvez lire vos éléments et stocker les maîtres-chiens dans un tableau avant de la déliaison. Commentaire si vous avez besoin de plus d'aide. J'ai eu cette idée en lisant l' $.fn.méthode clone afin de prendre un coup d'oeil à qui ainsi.
Ici est de savoir comment y parvenir, fournit un
storeEvents
et unrestoreEvents
méthodes sur une sélection.storeEvents
prend un instantané des événements sur le moment où il est appelé.restoreEvents
rétablit la dernière snapshot. Pourriez avoir besoin de tordre un peu pour le paramétrage de la déliaison lors de la restauration, peut-être que vous aimeriez garder le lié aux événements après le dernier snapshot.Depuis jQuery 1.4.2+ change la façon dont les gestionnaires d'événements sont stockés, ce qui semble pertinent:
La meilleure façon que j'ai trouvée a été d'utiliser l'événement de namespacing:
Dans l'exemple ci-dessus, tous les foobar événements indépendant. Notez que si vous aviez besoin de grain plus fin de contrôle, vous pourriez espace de noms chaque gestionnaire de clic et de les corréler à votre tableau de gestionnaires:
Il y a un plugin jQuery appelé Copie Des Événements, qui copie les événements d'un objet à un autre. Cela pourrait très facilement être utilisé pour "sauver" des événements à partir d'un élément et de les ramener plus tard. Juste une option de plus 🙂
Edit: correction de lien brisé
Afin de séparer un gestionnaire d'événements, vous devez passer à la fonction de gestionnaire en unbind(). Si vous avez déjà la fonction de gestionnaire, tout ce que vous avez à faire est de vous en rappeler.
unbind
séparer tous les gestionnaires si vous l'appelez sans arguments. Vous ne serez pas en mesure de les lier de nouveau plus tard, sauf si vous avez gardé une référence pour eux. Vous pouvez également séparer les événements que vous méconnaissez - e.g lié par un autre script. Il est préférable de faire appel à séparer avec un gestionnaire spécifique de sorte que vous pouvez être sûr.Vous pouvez utiliser le
event.handler
paramètre:event.handler
renvoie le gestionnaire qui a reçu l'événement, Donc en les omettant, vous pouvez garder les autres gestionnaires.Nick Craver semble avoir le bonne réponse pour jQuery 1.4.2+. Il comprend également un utile violon. Sa solution permet de récupérer tous les événements attachés à un élément jQuery et de comprendre le gestionnaire ils étaient attachés.