javascript - 将参数传递给事件监听器不起作用?

标签 javascript dom-events

我只是有一个问题,因为我下面的代码可以正常工作并播放正确的声音,但是,在控制台中也给出了一个错误:

index.js:26 Uncaught TypeError: Cannot read property 'play' of undefined at HTMLButtonElement.handleClick (index.js:26)
handleClick @ index.js:26

我想做的是将许多按钮分配给它们相应的声音。我只是想知道是否有更好的方法来做到这一点以及错误可能来自哪里?

let drumAreaArray = document.querySelectorAll(".drum");
let drumNameArray = ["crash", "kick-bass", "snare", "tom-1", "tom-2", "tom-3", "tom-4"];
let drumSoundArray = [];

for(let i = 0; i < drumNameArray.length; i++)
{
    drumAreaArray[i].addEventListener("click", handleClick);
}

//add audio for all files
for(let i = 0; i < drumNameArray.length; i++)
{
  let soundPath = "sounds/" + drumNameArray[i] +".mp3";
  let tempSound = new Audio(soundPath);
  drumSoundArray.push(tempSound);
}

//add event listeners to all drums
for(let i = 0; i < drumNameArray.length; i++)
{
    drumAreaArray[i].addEventListener("click",function(){handleClick(i);});
}

function handleClick(numberDrum)
{
  drumSoundArray[numberDrum].play();
}

最佳答案

首先,您要为同一个 drumNameArray 创建三个 for 循环。您可以使用单个。 您还可以在两个循环中将 eventListner 添加到 drumAreaArray 中。只需更改它即可。

关于javascript - 将参数传递给事件监听器不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59797477/

相关文章:

javascript - 用div分隔数字

javascript - 对象字面量方法的范围

javascript - 异步还是同步?我该如何处理这些API调用?

javascript - JS 性能 : Event Handler inside Condition vs Condition inside Event Hander

angular - 停止鼠标事件传播

javascript - lodash:迭代每个对象并获取其 key

javascript - 在 React App 中使用 Fullcalendar 方法

javascript - 当我执行 document.loginform.submit() 时,无法在 Javascript 中手动提交表单

Javascript onbeforeunload 函数

javascript - 滚动事件不会在 Sencha Touch 中触发