Ich versuche, ein Video-Pokerspiel in Javascript zu schreiben, um die Grundlagen zu erläutern, und bin auf ein Problem gestoßen, bei dem die Handler für jQuery-Klickereignisse mehrmals ausgelöst werden.
Sie sind an Schaltflächen zum Platzieren einer Wette angebracht und eignen sich gut zum Platzieren einer Wette aus erster Hand während eines Spiels (nur einmal abfeuern). Beim Wetten für die zweite Hand wird das Klickereignis jedoch jedes Mal zweimal ausgelöst, wenn eine Wette oder eine Platzierungswette gedrückt wird (also wird bei jedem Drücken der doppelte richtige Betrag gesetzt). Insgesamt folgt es diesem Muster für die Häufigkeit, mit der das Klickereignis ausgelöst wird, wenn einmal eine Wetttaste gedrückt wird - wobei der i-te Term der Sequenz für das Wetten der i-ten Hand vom Beginn des Spiels an gilt: 1, 2, 4 , 7, 11, 16, 22, 29, 37, 46, was für alles, was es wert ist, n (n + 1) / 2 + 1 zu sein scheint - und ich war nicht klug genug, um das herauszufinden, ich habe OEIS verwendet . :) :)
Hier ist die Funktion mit den Click-Event-Handlern, die aktiv sind. hoffentlich ist es leicht zu verstehen (lass es mich wissen, wenn nicht, ich möchte auch darin besser werden):
/** 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
}
});
}
Bitte lassen Sie mich wissen, wenn Sie Ideen oder Vorschläge haben oder wenn die Lösung für mein Problem einer Lösung für ein anderes Problem hier ähnlich ist (ich habe mir viele Threads mit ähnlichen Titeln angesehen und hatte kein Glück, eine Lösung zu finden, die funktionieren könnte für mich).
var amount = parseInt(this.id.replace(/[^\d]/g,''),10);
Und wenn Sie die gleiche Eigenschaft eines Elements verwenden werden mehr als einmal Cache diese Eigenschaft, nicht halten es bis suchen. Die Suche ist teuer.