Javascript'te temel videolarını indirmenin bir yolu olarak bir video poker oyunu yazmaya çalışıyorum ve jQuery click olay işleyicilerinin birden çok kez çalıştığı bir sorunla karşılaştım.
Bahis yapmak için düğmelere bağlanırlar ve bir oyun sırasında ilk elden bir bahis koymak için iyi çalışır (sadece bir kez ateşleme); ancak ikinci el için yapılan bahislerde, bir bahis veya bahis koyma düğmesine her basıldığında tıklama etkinliğini iki kez tetikler (böylece her bir basış için doğru miktarın iki katı bahis yapılır). Genel olarak, bir bahis düğmesine bir kez basıldığında tıklama olayının kaç kez tetiklendiğini izler - dizinin dördüncü terimi oyunun başlangıcından i'inci elin bahsi içindir : 1, 2, 4 , 7, 11, 16, 22, 29, 37, 46, bu değer ne olursa olsun n (n + 1) / 2 + 1 gibi görünüyor - ve bunu anlamaya yetecek kadar akıllı değildim, OEIS kullandım . :)
İşte, tıklama olay işleyicileriyle çalışan işlev; umarım anlaşılması kolaydır (değilse bana bildirin, bu konuda daha iyi olmak istiyorum):
/** 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
}
});
}
Herhangi bir fikriniz veya öneriniz varsa veya sorunumun çözümü burada başka bir soruna bir çözümle benziyorsa lütfen bana bildirin (benzer başlıklara çok benzedim ve çalışabilecek bir çözüm bulmakta şansım olmadı. benim için).
var amount = parseInt(this.id.replace(/[^\d]/g,''),10);
Ve bir öğenin aynı özelliğini birden fazla kez kullanacaksanız, bu özelliği önbelleğe almayın . Arama pahalıdır.