audio.play()不是一个函数。

时间:2017-01-20 15:49:28

标签: javascript html5

我正在通过http://wesbos.com做这个Javascript(vanilla JS)30天的挑战。 我试着不去看第一个挑战的参考代码。

无论如何,我试图让这段代码工作,但我最终得到了这个错误:" 未捕获的TypeError:audElem.play不是函数"

这是我的代码:

function functionA( item){

  //  alert("HEYYY")
  item.classList.add("playing");

  var audElem= item.getElementsByTagName('audio') [0].getElementsByTagName('source')[0];

  var song= audElem.getAttribute('src');
  song.currentTime=0;
  song.play();
}

这就是html部分:

<li class="flex-item " > A  

  <span class="flex-SubItem"> <br />  BOOM </span> 

  <audio id="boom" >
   <source src="sound-effects/boom.mp3" type="audio/mpeg">
  </audio>
</li>

我试图弄清楚但没有。除了你们,我没有人问。 我希望我能得到答案。 谢谢任何方式:)

4 个答案:

答案 0 :(得分:4)

play<audio>对象的一种方法,但您在字符串上调用它,它是从<source>对象的属性获得的。< / p>

答案 1 :(得分:3)

对于谁有兴趣我终于设法通过获取音频标签的ID并在之后调用它来使其工作。 这是代码:

             function functionA( item){

             item.classList.add("playing");

            var audElem= item.getElementsByTagName('audio')[0].getAttribute('id');

             var song = document.getElementById(audElem);
             song.play();

         } 

答案 2 :(得分:0)

您应该在音频元素上调用play()

  document.getElementById('boom').play();

https://jsfiddle.net/g5d0a6Lg/

答案 3 :(得分:0)

我遇到了同样的问题,只是使用querySelector修复了它。根据您的情况,您可以替换以下代码:

var audElem= item.getElementsByTagName('audio') [0].getElementsByTagName('source')[0];
var song= audElem.getAttribute('src');

此行:

document.querySelector('boom').play();