1. ホーム
  2. ジャバスクリプト

[解決済み】jQueryのクリックイベントが複数回発生する件

2022-03-26 07:15:35

質問

Javascriptでビデオポーカーゲームを基本から書こうとしているのですが、jQueryのクリックイベントハンドラが複数回発火する問題に遭遇しました。

ベットを置くためのボタンに取り付けられていて、ゲーム中に最初の手にベットを置くのはうまくいきます (1回だけ発射されます)。しかし、2番目の手にベットする場合は、ベットまたはプレースベットボタンが押されるたびにクリックイベントが2回発射されます (したがって、押すたびに正しい金額が2回賭けられます)。 全体として、ベットボタンを1回押したときにクリックイベントが発生する回数は、このパターンに従っています。 のベットに関するシーケンスである。 ゲーム開始からの手 1, 2, 4, 7, 11, 16, 22, 29, 37, 46, これはどう考えても n(n+1)/2 + 1 と思われます。 オエイス . :)

以下は、動作しているクリックイベントハンドラを含む関数です。わかりやすいといいのですが(そうでなければ教えてください、私ももっとうまくなりたいのです)。

/** 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
        }
    });
}

何かアイデアや提案があれば教えてください。また、私の問題に対する解決策が、ここにある別の問題に対する解決策と類似していれば教えてください(同じようなタイトルのスレッドをたくさん見ましたが、私に効くような解決策は見つかりませんでした)。

解決方法は?

クリックが一度しか動作しないようにするには、次のようにします。

$(".bet").unbind().click(function() {
    //Stuff
});