我正在打字遊戲。當多個玩家玩遊戲時,它會再次運行相同的一組功能。我正在使用變量j作爲計數器,以在輸入正確時提示單詞。出於某種原因,在每次擊球時第二次傳球時,它會記錄j = 1 & j =無論先前玩家的最後一個字+ 1的值如何。當每個玩家玩牌時,我希望他們輸入的每一組單詞都是相同的,這樣纔是公平的。我無法弄清楚爲什麼會發生這種情況,甚至不知道變量如何同時具有2個值?!?!?計數器變量在函數的第2遍中保存2個值
什麼給?
下面是有問題的代碼,但有一堆可能涉及的回調函數,儘管調用這個變量的唯一地方是在這個函數內部。
//advances ship on correct typing
function runRace() {
timer();
var j = 1;
//BUG HERE !! Works fine on first iteration but on second
//iterations value jumps beteween 1 and whatever the next
//one is. It's like on every keystroke it reassigns var j
//back to 1, then back to the element number it was on
//last time
//!!! j has 2 values !!!it's keeping the value from the
//prior running of run race
$(document).keyup(function(e){
var targetWord = $(".toType").text();
var typedWord = $("#word").val();
//while (j < gameWords.length){
console.log("j = " + j);
if(typedWord === targetWord){
$(".player").css({left: "+=15px",});
targetWord = $(".toType").text(gameWords[j]);
$("#word").val("");
j++;
}else {
return
};
//}
});
}
如果您需要查看代碼的其餘部分來了解它,它就在這裏。儘管它已經是不正確的的jsfiddle理性運行,它的工作原理等,然後錯誤,本地https://jsfiddle.net/ujsr139r/1/
每次你調用'runRace()''你的代碼就是在'keyup'上創建一個監聽器 - 所以下一次運行的時候有2個keyups正在觸發,然後是3次3等等。你應該只有監聽器一次。 – Darren
這是完全意義!現在我只需要弄清楚如何重構它只能調用它一次 – nwimmer123