Dans jQuery, existe-t-il un moyen de lier un seul clic?

J'ai une application ajax qui fonctionnera sur toutes les interactions. Je voudrais pouvoir exécuter ma fonction de configuration à chaque fois pour que tout mon code d'installation pour cette fonction reste encapsulé. Cependant, les éléments de liaison plus d'une fois signifient que le gestionnaire fonctionnera plus d'une fois, ce qui n'est évidemment pas souhaitable. Existe-t-il une manière élégante dans jQuery d'appeler un lien sur un élément plus d'une fois sans que le gestionnaire soit appelé plus d'une fois?

Vous pouvez attacher l'événement au document avec la fonction one() :

 $(document).one('click', function(e) { // initialization here }); 

Une fois exécuté, ce gestionnaire d'événements est à nouveau supprimé afin qu'il ne soit pas exécuté à nouveau. Cependant, si vous avez besoin de l'initialisation à exécuter avant l'événement de clic d'un autre élément, nous devrons penser à autre chose. L'utilisation de mousedown au lieu de click peut fonctionner alors, car l'événement mousedown est déclenché avant l'événement de clic.

L'utilisateur jQuery fonctionne comme Tom a déclaré, mais dévisser le gestionnaire chaque fois avant de lier à nouveau. Cela permet d'affecter le gestionnaire d'événements à une variable que l'utilisation d'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 utiliser .unbind('click') pour supprimer tous les gestionnaires de clics attachés à un élément.

Vous pouvez également utiliser .off () si unbind ne fait pas l'affaire. Assurez-vous que le sélecteur et l'événement donnés à .off correspondent exactement à ceux initialement fournis à .on ():

 $("div.selector").off("click", "a.another_selector"); $("div.selector").on("click", "a.another_selector", function(e){ 

C'est ce qui m'a permis de résoudre le même problème de rechargement ajax.

La réponse de Chetan Sastry est ce que vous voulez. En gros, appelle simplement un $ (element) .unbind (event); Avant chaque événement.

Donc, si vous avez une fonction comme loadAllButtonClicks () qui contient tous les

 $(element).on("click", function (){}); 

Les méthodes pour chaque bouton de votre page, et vous exécutez que chaque fois qu'un bouton est cliqué, cela produira évidemment plus d'un événement pour chaque bouton. Pour résoudre ce problème, ajoutez simplement

 $(element).unbind(event); 

Avant chaque

 $(element).on("click", function (){}); 

Et il dégage tous les événements sur cet élément, puis ajoutez l'événement d'un clic.