2013-03-03 311 views
0

下面的代碼工作(警報彈出):getElementsByClassName方法不工作,但的getElementById是

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> 

但爲什麼這個不行?

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> 

這不工作,要麼萬一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> 

我所改變的是一個ID而不是,我給它一個類(因爲我有多個實例這個音頻播放器),並使用getElementsByClassName而不是getElementById。我認爲getElementsByClassName現在與所有瀏覽器兼容?我正在使用最新的Firefox。

+1

'getElementById'返回一個元素,'getElementsById'返回'NodeList'對象,即它基本上是一個元素數組。在另一個問題上查看更新的答案。 – ultranaut 2013-03-03 02:07:46

+0

本應該是「'getElemensByClassName''返回'NodeList'」。 – ultranaut 2013-03-03 02:20:29

+0

可能重複[什麼getElementsByClassName返回?](http://stackoverflow.com/questions/10693845/what-does-getelementsbyclassname-return) – Bergi 2015-10-29 10:10:25

回答

3

我很確定document.getElementsByClassName()將返回元素集合,即使頁面上只有一個具有該類名稱的元素。所以你實際上並沒有將事件監聽器應用到音頻元素,而是一組元素。

如果總是隻有一個類聲音元素,請嘗試var sound = document.getElementsByClassName("music")[0];

+0

謝謝。雖然我有這個音頻播放器的類名稱爲「sound」的多個實例,但我想我需要某種for循環來將「eventlistener」附加到「sound」的每個實例上?爲什麼不'('.sound')。addEventListener(「play」,function()工作? – Windbrand 2013-03-03 02:31:51

+1

@Windbrand'('.sound')'實際上只是說得到字符串「.sound」的值。這可能不是你想要做的,我認爲你正在嘗試使用像[jQuery](http://jquery.com)或[Prototype](http://prototypejs.org/)這樣的Javascript框架。 ('play',function(){alert('playing')),這些元素使用'$'來按類或類來選擇元素,例如,在jQuery中你可以寫'$('。sound')。 ;});' – 2013-03-03 02:39:44

相關問題