点击回调音频和innerHTML一起不按预期工作?

时间:2017-01-22 21:32:29

标签: javascript audio callback innerhtml

在下面的代码片段中,预期的行为是点击"播放"然后播放mp3并播放"播放"变为"玩"。但是在我目前的浏览器(Mozilla,Safari)中,我得到以下内容:点击" Play"它变成了#34;玩"但是没有播放文件。然后,只有在点击"播放"该文件被播放。为什么我要点击两次?在评论该行" document.getElementById(' player')时,innerHTML ='播放&#39 ;;"第一次点击后立即播放该文件。

<!doctype html>
<html>
<body>
 <div id="player">Play</div>
 <script>
  audioEl = document.createElement("audio");
  audioEl.setAttribute('src','audioFile.mp3');
  document.getElementById('player').appendChild(audioEl);

  document.getElementById('player').addEventListener('click',function() {
   document.getElementById('player').innerHTML = 'playing';
   audioEl.play();
  });
</script>
</body>
</html>

2 个答案:

答案 0 :(得分:1)

您正在替换<{1}}的{​​{1}},包括.innerHTML元素,

#player

您可以使用<audio>document.getElementById('player').innerHTML = 'playing'; #text连接#player节点,或使用.innerHTML

.innerHTML += "playing"

.insertAdjacentHTML

答案 1 :(得分:1)

innerHTML替换元素的所有内容,而不仅仅是文本。创建audio标记后,您的HTML如下所示:

<!doctype html>
<html>
<body>
    <div id="player">Play
        <audio src='audioFile.mp3'>
    </div>
</body>
</html>

因此,当您使用playing替换div的内容时,请删除<audio src='audioFile.mp3'>

您必须在div中添加文本元素,如此

<div id="player">
    <div id="player-text"></div>
</div>

并使用此javascript

audioEl = document.createElement("audio");
audioEl.setAttribute('src','audioFile.mp3');
document.getElementById('player').appendChild(audioEl);

document.getElementById('player').addEventListener('click',function() {
    document.getElementById('player-text').innerHTML = 'playing';
    audioEl.play();
});