jQuery点击多次触发事件
我试图用Javascript编写一个视频扑克游戏作为获取它的基础知识的一种方式,而且我遇到了jQuery click事件处理程序多次触发的问题。
他们附在按钮上进行投注,并且在比赛期间第一手投注就可以正常工作(只发射一次); 但是在下注二手牌时,每次按下投注或投注按钮时都会触发点击事件两次(所以每次按下投注的金额就是正确金额的两倍)。 总的来说,它遵循这种模式,当点击一次下注按钮时触发点击事件的次数 - 序列的第i项用于从游戏开始时第i只手的下注:1,2,4 ,7,11,16,22,29,37,46,因为任何值得的东西似乎都是n(n + 1)/ 2 + 1,而且我还不够聪明,所以我使用了OEIS 。 :)
以下是正在执行的单击事件处理程序的功能; 希望这很容易理解(如果没有,请告诉我,我也想更好):
/** 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
});
.unbind()
已弃用,您应该使用.off()
方法。 只需拨打.off()
调用正确的之前.on()
这将删除所有事件处理程序:
$(element).off().on('click', function() {
// function body
});
只删除注册的“点击”事件处理程序:
$(element).off('click').on('click', function() {
// function body
});
。一()
更好的选项是.one()
:
处理程序每个事件类型每个元素最多执行一次。
$(".bet").one('click',function() {
//Your function
});
如果有多个班级,每个班级需要点击一次,
$(".bet").on('click',function() {
//Your function
$(this).off('click'); //or $(this).unbind()
});
链接地址: http://www.djcxy.com/p/60455.html