亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用 for 循環為音頻文件創建動態 URL?Javascript

如何使用 for 循環為音頻文件創建動態 URL?Javascript

臨摹微笑 2023-04-27 15:26:36
我最近開始學習編碼,但我對這種自我挑戰感到困惑。我的目的是使用 for 循環循環遍歷包含代表按鈕的顏色名稱的數組,以創建指向音頻文件的動態 URL,而不是將音頻文件的 URL 單獨添加到每個按鈕。作為新手,這段代碼對我來說很有意義,但它不起作用。使用瀏覽器“檢查”工具,我注意到輸出buttonColours[i]為undefined。請幫助我了解原因!var buttonColours = ["red","blue","green","yellow"];var sounds = [];for (var 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);    });}
查看完整描述

2 回答

?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

解決此問題的另一種方法是使用letinstead of var. let在循環范圍內創建一個變量,其中var將是一個全局變量,它將在每次迭代時被覆蓋。這意味著let您不會覆蓋該值,而是在每次迭代時創建一個新值,因此引用保持不變。


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);

? });

}


查看完整回答
反對 回復 2023-04-27
?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

由于點擊函數是一個回調,變量 i 可能在回調發生之前已經改變。所以你必須將 i 的值綁定到函數。試試這個:


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


}

您在代碼中遇到的另一個問題是您尚未初始化聲音數組。我不認為它會出錯,所以我沒有更正它。

查看完整回答
反對 回復 2023-04-27
  • 2 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號