En jQuery, est-il possible de lier un cliquez une fois?
J'ai une application ajax qui va exécuter des fonctions sur chaque interaction. J'aimerais être en mesure d'exécuter ma fonction de configuration à chaque fois de sorte que tous mes de code de configuration pour la fonction reste encapsulée. Toutefois, les éléments de liaison plus d'une fois signifie que le gestionnaire d'exécuter plus d'une fois, ce qui n'est évidemment pas souhaitable. Est-il une manière élégante dans jQuery pour appeler bind sur un élément plus d'une fois sans le gestionnaire appelé plus d'une fois?
OriginalL'auteur Chris Henry | 2010-06-01
Vous devez vous connecter pour publier un commentaire.
Vous pouvez joindre à l'événement pour
document
avec leone()
fonction:Une fois exécuté, ce gestionnaire d'événement est supprimé à nouveau de sorte qu'il ne sera pas exécuté de nouveau. Toutefois, si vous avez besoin de l'initialisation d'exécuter avant l'événement click d'un autre élément, nous devrons penser à autre chose. À l'aide de
mousedown
au lieu declick
peut travailler, comme l'événement mousedown est déclenché avant l'événement click.);
.Oh merci Ben, fixation...
Ne sais pas de cela.
Ce sera seulement de résoudre son problème en partie. Attacher les évènements à l'aide de
one
plusieurs fois encore exécuter plusieurs fois, mais une fois chacun.Je ne comprends pas très bien. Il y a un seul
document
objet (à laquelle l'événement bulles), alors comment suis-je en joignant le cas à plusieurs reprises?OriginalL'auteur Tom Bartel
Utilisateur jQuery
one
fonction comme l'a dit Tom, mais séparer le gestionnaire à chaque fois avant de se lier à nouveau. Il permet d'avoir le gestionnaire d'événement affecté à une variable que l'utilisation d'une fonction anonyme.Vous pouvez également faire
.unbind('click')
pour supprimer tous les gestionnaires de clic attaché à un élément.OriginalL'auteur Chetan Sastry
Vous pouvez également utiliser .off() si unbind ne pas faire l'affaire. Assurez-vous que le sélecteur et un événement donné .hors correspondent exactement à ceux initialement prévus .():
C'est ce qui a fonctionné pour moi dans la résolution de la même ajax rechargement problème.
OriginalL'auteur user1453804
La réponse de Chetan Sastry est ce que vous voulez. Fondamentalement, il suffit d'appeler un $(element).unbind(event); avant chaque événement.
Donc si vous avez une fonction comme loadAllButtonClicks() qui contient toutes les
méthodes pour chaque bouton sur votre page, et vous exécutez chaque fois qu'un bouton est cliqué, ce sera bien évidemment de produire plus d'un événement pour chaque bouton. Pour résoudre ce juste ajouter
avant chaque
et séparer tous les événements de cet élément, puis ajouter un événement click.
OriginalL'auteur mark.inman