75 votes

L'événement jQuery Button.click() est déclenché deux fois.

Je rencontre le problème suivant avec ce code :

<button id="delete">Remove items</button>

$("#delete").button({
     icons: {
             primary: 'ui-icon-trash'
     }
}).click(function() {
     alert("Clicked");
});

Si je clique sur ce bouton, l'alerte s'affiche deux fois. Ce n'est pas seulement avec ce bouton spécifique mais avec chaque bouton que je crée.

Qu'est-ce que je fais de mal ?

118voto

Simeon Abolarinwa Points 333

Dans ce cas, nous pouvons faire ce qui suit

$('selected').unbind('click').bind('click', function (e) {
  do_something();
});

L'événement se déclenche deux fois initialement, mais lorsque la page est rafraîchie, il se déclenche quatre fois. C'est après de nombreuses heures infructueuses que j'ai trouvé la solution grâce à une recherche sur Google.

Je dois également dire que le code fonctionnait initialement jusqu'à ce que je commence à utiliser le widget accordéon JQueryUI.

64voto

Nick Craver Points 313913

Votre code actuel fonctionne, vous pouvez l'essayer ici : http://jsfiddle.net/s4UyH/

Vous avez quelque chose en dehors de l'exemple qui déclenche un autre .click() vérifiez si d'autres gestionnaires sont également déclenchant un click sur cet élément.

32voto

Un comportement étrange que j'ai également connu. Donc pour moi "return false" a fait l'affaire.

        $( '#selector' ).on( 'click', function() {
            //code
            return false;
        });

11voto

Sandeep Taneja Points 131

La réponse de Nick Craver est la meilleure ci-dessus. Par erreur, j'ai inclus un fichier JS deux fois, ce qui a causé tous les problèmes. Merci Nick.

1voto

igarciaoliver Points 11

J'ai découvert que le fait de lier un element.click dans une fonction qui se produit plus d'une fois le mettra en file d'attente de sorte que la prochaine fois que vous cliquerez dessus, il se déclenchera autant de fois que la fonction de liaison a été exécutée. C'est probablement une erreur de débutant de ma part, mais j'espère que cela vous aidera. TL,DR : Assurez-vous de lier tous les clics à une fonction de configuration qui ne se produit qu'une fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X