327 votes

jQuery cliquez plusieurs fois de déclenchement des événements

Je suis d'essayer d'écrire un jeu de poker vidéo en Javascript comme un moyen d'obtenir les bases vers le bas, et j'ai couru dans un problème où le jQuery, cliquez sur les gestionnaires d'événements sont à tirer à plusieurs reprises.

Ils sont attachés à des boutons pour placer un pari, et il fonctionne très bien pour le placement d'un pari sur la première main au cours d'un jeu (tir qu'une seule fois); mais dans le pari de la seconde main, il déclenche l'événement click deux fois chaque fois qu'un pari ou pari d'endroit bouton est pressé (donc deux fois le montant correct est de mise pour chaque presse). Dans l'ensemble, il suit ce modèle pour nombre de fois que l'événement click est déclenché lorsque vous appuyez sur un bouton de mise une fois, où le ième terme de la suite est pour le pari de l' ith main dès le début du jeu: 1, 2, 4, 7, 11, 16, 22, 29, 37, 46, ce qui semble être n(n+1)/2 + 1 pour tout ce qui vaut la peine d'--et je n'étais pas assez intelligent pour comprendre cela, J'ai utilisé OEIS. :)

Voici la fonction en cliquant sur les événements qui se chamaillent; j'espère que c'est facile à comprendre (laissez-moi savoir si pas, je veux apprendre à mieux que bien):

/** The following function keeps track of bet buttons that are pressed, until place button is pressed to place bet. **/
function pushingBetButtons() {
    $("#money").text("Money left: $" + player.money); // displays money player has left

    $(".bet").click(function() {
        var amount = 0; // holds the amount of money the player bet on this click
        if($(this).attr("id") == "bet1") { // the player just bet $1
            amount = 1;
        } else if($(this).attr("id") == "bet5") { // etc.
            amount = 5;
        } else if($(this).attr("id") == "bet25") {
            amount = 25;
        } else if($(this).attr("id") == "bet100") {
            amount = 100;
        } else if($(this).attr("id") == "bet500") {
            amount = 500;
        } else if($(this).attr("id") == "bet1000") {
            amount = 1000;
        }
        if(player.money >= amount) { // check whether the player has this much to bet
            player.bet += amount; // add what was just bet by clicking that button to the total bet on this hand
            player.money -= amount; // and, of course, subtract it from player's current pot
            $("#money").text("Money left: $" + player.money); // then redisplay what the player has left
        } else {
            alert("You don't have $" + amount + " to bet.");
        }
    });

    $("#place").click(function() {
        if(player.bet == 0) { // player didn't bet anything on this hand
            alert("Please place a bet first.");
        } else {
            $("#card_para").css("display", "block"); // now show the cards
            $(".card").bind("click", cardClicked); // and set up the event handler for the cards
            $("#bet_buttons_para").css("display", "none"); // hide the bet buttons and place bet button
            $("#redraw").css("display", "block"); // and reshow the button for redrawing the hand
            player.bet = 0; // reset the bet for betting on the next hand
            drawNewHand(); // draw the cards
        }
    });
}

S'il vous plaît laissez-moi savoir si vous avez des idées ou des suggestions, ou si la solution à mon problème est similaire à une solution à un autre problème ici (j'ai regardé plusieurs de la même façon intitulé fils et n'a pas de chance de trouver une solution qui pourrait fonctionner pour moi).

594voto

Rob Points 804

Pour vous assurer un clic seules actions une fois utilisent ceci :

424voto

trolle Points 389

est obsolète et vous devez utiliser la [ ](http://api.jquery.com/off/) méthode à la place. Il suffit d’appeler à droite avant d’appeler .

164voto

Shaunak D Points 6453

Une meilleure option serait de .one() : le gestionnaire est exécuté au maximum une fois par élément par type d’événement.

18voto

Pointy Points 172438

Si vous appelez cette fonction sur chaque « clic », puis c' est l' Ajout d’une autre paire de gestionnaires lors de chaque appel.

Ajout des gestionnaires avec jQuery juste n’est pas comme définissant la valeur de l’attribut « onclick ». On peut ajouter des gestionnaires d’autant qu’on le désire.

2voto

Sukhwinder Gill Points 2613

Il se produit en raison de la particulier événement est lié à plusieurs reprises au même élément.

La solution qui a fonctionné pour moi est :

Tuer tous les événements liés à l’aide `` méthode.

Et puis joignez votre écouteur de méthode.

Par conséquent,

doit être :

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