javascript - 使用 forEach 迭代 querySelectorAll 的多个元素

标签 javascript foreach jquery-selectors addeventlistener

问题如下:我创建了一个单独的 JS 文件,在其中我想迭代属于某个类 audioz 的元素。在我的 JS 代码的第二行中,我在 item 上使用 addEventListener,但是该代码似乎不适用于 item,除非我put document,但结果仍然有缺陷。我在迭代中做错了什么?

JS:

document.querySelectorAll('.audioz').forEach(item => {
    item.addEventListener('keydown', function(e) {
        const ss = document.querySelector(`audio[data-key="${e.keyCode}"]`);
        console.log(ss);
        ss.play();
    })
})

HTML:

<audio class="audioz" data-key="65" src="sounds/clap.wav"></audio>
<audio class="audioz" data-key="83" src="sounds/hihat.wav"></audio>
<audio class="audioz" data-key="68" src="sounds/kick.wav"></audio>
<audio class="audioz" data-key="70" src="sounds/openhat.wav"></audio>
<audio class="audioz" data-key="71" src="sounds/boom.wav"></audio>
<audio class="audioz" data-key="72" src="sounds/ride.wav"></audio>
<audio class="audioz" data-key="74" src="sounds/snare.wav"></audio>
<audio class="audioz" data-key="75" src="sounds/tom.wav"></audio>
<audio class="audioz" data-key="76" src="sounds/tink.wav"></audio>

最佳答案

您当前正在向每个 audio 标记添加一个 keydown 事件监听器。但是,audio 标记是隐藏的,因此您无法对其执行 keydown 事件。因此,您的代码将无法工作。

将事件监听器添加到文档中。

document.addEventListener('keydown', function(e) {
  const ss = document.querySelector(`audio[data-key="${e.keyCode}"]`);
  console.log(ss);
  ss.play();
})
<audio class="audioz" data-key="65" src="https://interactive-examples.mdn.mozilla.net/media/cc0-audio/t-rex-roar.mp3"></audio> press the A key

关于javascript - 使用 forEach 迭代 querySelectorAll 的多个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70731759/

相关文章:

javascript - 用某些字符替换 regExp (Javascript)

具有动态生成参数的 Javascript 函数

javascript - 具有主干路由的嵌套 View

javascript - forEach inside Ticker 使 Canvas 变慢

html - 在表中显示 check 或 x bool 值

javascript - ul li 中 li 的 jQuery 选择器

javascript - 将 JSON 字符串从 jsp 传递到 js 文件

php - 使用两个 foreach 循环将一个表的结果插入另一个表

jQuery 为空但排除某个元素

javascript - 如何使用 jQuery 从某些(多个)类中获取所有元素?