javascript - 带有音频和innerHTML 的点击回调无法按预期工作?

标签 javascript audio callback innerhtml

在下面的代码片段中,预期的行为是单击“播放”,然后播放 mp3,并将“播放”更改为“正在播放”。然而,在我当前的浏览器(Mozilla、Safari)中,我得到以下信息:当单击“播放”时,它会转换为“正在播放”,但没有播放任何文件。然后,仅当单击“播放”时才会播放该文件。为什么我必须点击两次?注释掉“document.getElementById('player').innerHTML = 'playing';”行时第一次点击后文件会立即播放。

<!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>

最佳答案

innerHTML替换元素的所有内容,而不仅仅是文本。创建audio后标签,您的 HTML 看起来像这样:

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

所以当你将div的内容替换为playing时您删除 <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();
});

关于javascript - 带有音频和innerHTML 的点击回调无法按预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41796385/

相关文章:

javascript - D3 错误地处理堆积条形图

android - Android中的音频频率

javascript - jQuery:单击 native 音频元素

node.js - 使用 Node.js 和 Mongoose 将查询结果保存到模型/模式的属性

r - 如何指定 by( ) 或相关的 apply( ) 函数中使用的 FUN

javascript - Lodash union 无法与展开操作符一起使用

javascript - 滚动到 div 外部将滚动内容

php - 在手机上播放带有Blob的音频标签

javascript - 使用 CouchDB 和 nano.js 进行回调和返回

javascript - 同一页面上有两个不同的 Colorbox 弹出窗口单独设置?