getElementsByClassName 不起作用,但 getElementById 起作用

Win*_*and 0 audio getelementbyid getelementsbyclassname

以下代码有效(弹出警报):

var sound = document.getElementById("music");
    sound.addEventListener("play", function () {
    alert("playing");
});
....
....
<audio controls id="music">
    <source src="http://upload.wikimedia.org/wikipedia/commons/c/c8/Example.ogg"/>
</audio>
Run Code Online (Sandbox Code Playgroud)

但为什么这不起作用呢?

var sound = document.getElementsByClassName("music");
    sound.addEventListener("play", function () {
    alert("playing");
});
....
....
<audio controls class="music">
    <source src="http://upload.wikimedia.org/wikipedia/commons/c/c8/Example.ogg"/>
</audio>
Run Code Online (Sandbox Code Playgroud)

如果 getElementsByClassName 返回与 getElementById 不同的内容,这也不起作用:

('.sound').addEventListener("play", function () {
    alert("playing");
});
....
....
<audio controls class="music">
    <source src="http://upload.wikimedia.org/wikipedia/commons/c/c8/Example.ogg"/>
</audio>
Run Code Online (Sandbox Code Playgroud)

我所更改的只是 ID,而不是 ID,而是给了它一个类(因为我有此音频播放器的多个实例),并使用 getElementsByClassName 而不是 getElementById。我认为 getElementsByClassName 现在与所有浏览器兼容?我正在使用最新的火狐浏览器。

Ste*_*n V 6

我很确定document.getElementsByClassName()会返回一组元素,即使页面上只有一个具有该类名称的元素。因此,您实际上并不是将事件侦听器应用于音频元素,而是将事件侦听器应用于元素数组。

如果类声音中始终只有一个元素,请尝试var sound = document.getElementsByClassName("music")[0];.

  • @Windbrand `('.sound')` 实际上只是说获取字符串“.sound”的值。这可能不是您想要做的。我认为您正在尝试使用像 [jQuery](http://jquery.com) 或 [Prototype](http://prototypejs.org/) 这样的 Javascript 框架,它们使用 `$` 按类或 ID 选择元素就像你一样。例如,在 jQuery 中,您可以编写 `$('.sound').on('play', function() {alert('playing');});` (2认同)