2 回答

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊
解決此問題的另一種方法是使用letinstead of var. let在循環(huán)范圍內(nèi)創(chuàng)建一個(gè)變量,其中var將是一個(gè)全局變量,它將在每次迭代時(shí)被覆蓋。這意味著let您不會(huì)覆蓋該值,而是在每次迭代時(shí)創(chuàng)建一個(gè)新值,因此引用保持不變。
var buttonColours = ["red","blue","green","yellow"];
var sounds = [];
// Notice let i instead of var i.
for (let i = 0; i < buttonColours.length; i++) {
? $("." + buttonColours[i]).click(function(event) {
? ? // Add sound when button is clicked
? ? sounds[i] = new Audio("sounds/" + buttonColours[i] + ".mp3");
? ? sounds[i].play();
? ? // Add CSS class when button is clicked
? ? $(".red").addClass("pressed");
? ? setTimeout(function() {
? ? ? $(".red").removeClass("pressed");
? ? }, 200);
? });
}

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
由于點(diǎn)擊函數(shù)是一個(gè)回調(diào),變量 i 可能在回調(diào)發(fā)生之前已經(jīng)改變。所以你必須將 i 的值綁定到函數(shù)。試試這個(gè):
var buttonColours = ["red", "blue", "green", "yellow"];
var sounds = [];
for (var i = 0; i < buttonColours.length; i++) {
? $("." + buttonColours[i] + "").click(function(i, event) { // OBSERVE i have added i as a parameter
? ? // Add sound when button is clicked
? ? sounds[i] = new Audio("sounds/" + buttonColours[i] + ".mp3");
? ? sounds[i].play();
? ? // Add CSS class when button is clicked
? ? $(".red").addClass("pressed");
? ? setTimeout(function() {
? ? ? $(".red").removeClass("pressed");
? ? }, 200);
? }.bind(this, i)); // OBSERVE I have added an i here
}
您在代碼中遇到的另一個(gè)問題是您尚未初始化聲音數(shù)組。我不認(rèn)為它會(huì)出錯(cuò),所以我沒有更正它。
添加回答
舉報(bào)