J'ai une application ajax qui va exécuter des fonctions à chaque interaction. J'aimerais pouvoir exécuter ma fonction de configuration à chaque fois afin que tout mon code d'installation pour cette fonction reste encapsulé. Cependant, relier des éléments plus d'une fois signifie que le gestionnaire s'exécutera plus d'une fois, ce qui est évidemment indésirable. Existe-t-il un moyen élégant dans jQuery d'appeler bind sur un élément plus d'une fois sans que le gestionnaire ne soit appelé plus d'une fois?Dans jQuery, est-il possible de lier un clic une seule fois?
Répondre
Vous pouvez joindre l'événement à document
avec la fonction one()
:
$(document).one('click', function(e) {
// initialization here
});
Une fois exécuté, ce gestionnaire d'événement est supprimé à nouveau de sorte qu'il ne fonctionne pas à nouveau. Toutefois, si vous avez besoin de l'initialisation pour exécuter avant l'événement click d'un autre élément, nous devrons penser à autre chose. L'utilisation de mousedown
au lieu de click
peut alors fonctionner, car l'événement mousedown est déclenché avant l'événement click.
L'utilisateur jQuery one
fonctionne comme Tom, mais délie le gestionnaire à chaque fois avant de se lier à nouveau. Il est utile d'affecter le gestionnaire d'événements à une variable plutôt que d'utiliser une fonction anonyme.
var handler = function(e) { // stuff };
$('#element').unbind('click', handler).one('click', handler);
//elsewhere
$('#element').unbind('click', handler).one('click', handler);
Vous pouvez également faire .unbind('click')
pour supprimer tous les gestionnaires de clic attachés à un élément.
La réponse de Chetan Sastry est ce que vous voulez. Fondamentalement, il suffit d'appeler un $ (élément) .unbind (événement); avant chaque événement.
Donc, si vous avez une fonction comme loadAllButtonClicks() qui contient tous les
$(element).on("click", function(){});
méthodes pour chaque bouton sur votre page, et que vous exécutez que chaque fois qu'un bouton est cliqué, cela produira évidemment plus un événement pour chaque bouton. Pour résoudre ce problème il suffit d'ajouter
$(element).unbind(event);
avant chaque
$(element).on("click", function(){});
et il délie tous les événements à cet élément, puis ajoutez l'un événement de clic.
Vous pouvez également utiliser .off() si unbind ne fait pas l'affaire. Assurez-vous que le sélecteur et événement donné à .off correspondent exactement à ceux initialement prévus à .oN():
$("div.selector").off("click", "a.another_selector");
$("div.selector").on("click", "a.another_selector", function(e){
C'est ce qui a fonctionné pour moi à résoudre le même problème rechargeant ajax.
J'aime ça parce que $ (element) .unbind (event); solution supprime tous les événements du type (par exemple, clic) de l'élément, alors que cette méthode supprime simplement celle liée au sélecteur en question et laisse les autres attachés même s'ils partagent le même type d'événement. –
- 1. Alerte une seule fois (jQuery)
- 2. jQuery - FADEIN une seule fois
- 3. clone jquery une seule fois
- 4. jQuery: exécuter une seule fois
- 5. Onglets jQuery-UI - charger une seule fois
- 6. jquery comment faire insérer Avant de travailler une seule fois, au premier clic?
- 7. Lier un clic sur un bouton dynamique avec jQuery?
- 8. Jouer l'animation jQuery en une seule fois
- 9. jQuery: la décoloration dans une page Web une seule fois
- 10. Comment lier la fonction aux événements DOM une fois et une seule fois afin qu'ils ne s'exécutent pas une seconde fois dans le déclenchement de l'événement?
- 11. UpdatePanel rafraichit une seule fois
- 12. jQuery - Ne faites qu'une seule fois
- 13. Lier "up" élément dans jQuery? c'est possible?
- 14. Y compris un fichier de classe PHP une seule fois
- 15. Affichage div une seule fois
- 16. jquery $ .getJSON ne fonctionne qu'une seule fois dans Internet Explorer
- 17. MultiTrigger s'exécute une seule fois
- 18. procédure pour appeler un exe une seule fois
- 19. En utilisant Jquery, appelez une seule fois la fonction
- 20. Les événements du plugin jQuery se déclenchent une seule fois
- 21. Comment effectuer une fonction de clic seulement la première fois dans jQuery
- 22. Chargement de la classe une seule fois
- 23. Chargement de l'assemblage une seule fois
- 24. Utilisation de la minuterie une seule fois
- 25. Peindre l'arrière-plan une seule fois
- 26. Initialiser une classe une seule fois
- 27. L'événement Drupal jQuery click est appelé trois fois par clic
- 28. jQuery/Javascript: déclenche un clic droit sur un clic normal?
- 29. Est-il possible de mapper une touche pour simuler un clic du milieu dans xwindows?
- 30. Persistance sur un clic en ligne une fois application
Il vous manque un ');' dedans. – Ben
Oh merci Ben, corrigeant ... –
Je ne connaissais pas celui-ci. – DMin