Saya mencoba untuk menulis permainan video poker dalam Javascript sebagai cara untuk mendapatkan dasar-dasar itu, dan saya telah mengalami masalah di mana penangan event klik jQuery menembak beberapa kali.
Mereka melekat pada tombol untuk menempatkan taruhan, dan itu berfungsi dengan baik untuk menempatkan taruhan di tangan pertama selama pertandingan (menembak hanya sekali); tetapi dalam bertaruh untuk tangan kedua, ia menyalakan acara klik dua kali setiap kali taruhan atau tombol taruhan tempat ditekan (jadi dua kali jumlah yang benar adalah taruhan untuk setiap pers). Secara keseluruhan, ini mengikuti pola ini untuk berapa kali acara klik dilepaskan saat menekan tombol taruhan sekali - di mana istilah h urutannya adalah untuk taruhan tangan ke - h dari awal permainan: 1, 2, 4 , 7, 11, 16, 22, 29, 37, 46, yang tampaknya n (n + 1) / 2 +1 untuk apa pun yang bernilai - dan saya tidak cukup pintar untuk mengetahuinya, saya menggunakan OEIS . :)
Inilah fungsi dengan pengendali acara klik yang beraksi; semoga mudah dimengerti (beri tahu saya jika tidak, saya juga ingin menjadi lebih baik):
/** 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
}
});
}
Tolong beri tahu saya jika Anda memiliki ide atau saran, atau jika solusi untuk masalah saya mirip dengan solusi untuk masalah lain di sini (Saya telah melihat banyak utas yang berjudul sama dan tidak beruntung dalam menemukan solusi yang dapat bekerja untuk saya).
var amount = parseInt(this.id.replace(/[^\d]/g,''),10);
Dan jika Anda akan menggunakan properti yang sama dari suatu elemen lebih dari satu kali cache properti itu, jangan terus mencarinya. Pencarian itu mahal.