2013-05-12 74 views
1

代码我创建是与功能应该.play()它的功能...这里是代码动态声音文件()

function playSound() { 
document.getElementById('newMessage').play(); 
} 

var sound = document.createElement('audio'); 
sound.setAttribute("src","http://www.soundjay.com/button/beep-2.wav"); 
sound.id="newMessage"; 
sound.setAttribute('autoplay','false'); 
document.body.appendChild(sound); 

虽然每次在控制台试图做它说playSound是不确定的。所以我试着做document.getElementById('newMessage').play();,它也不会播放,也不会$('#newMessage')。play();其中带有对象[对象对象]的错误没有方法播放。

任何建议,因为这是第一次尝试动态创建音频文件并使用一个函数来播放它。我已经看了一些其他的SO主题,以及他们似乎并没有带领我走向正确的方向。谢谢

+1

它不使用jQuery工作的原因是因为jQuery没有一个'play'方法。如果你想用jQuery选择元素,你必须使用'$('#newMessage')[0] .play();'或者可能'$('#newMessage')。trigger(“play”) ;' – Ian 2013-05-12 20:07:53

+0

感谢伊恩的推理:) – EasyBB 2013-05-12 22:57:08

回答

1

我的猜测是你正在定义playSound方法后,页面已经加载,也许在一些onload方法。如果是这种情况,请尝试方法连接到window对象:

window.playSound = function() { 
    document.getElementById('newMessage').play(); 
} 

这使得即使该功能在页面加载后定义的函数可用。你也不应该将自动播放设置为false。它默认为false,如果你想设置为true,你可以设置autoplay="autoplay"

JSFiddle

+0

好点,但它仍然奇怪,'document.getElementById('newMessage')。play();'不工作“要么 – Ian 2013-05-12 20:07:01

+0

@伊恩 - 不知道什么是错的一个更完整的代码示例。我只是在我的答案中添加了一个JSFiddle,它显示了一个工作示例。 – ljfranklin 2013-05-12 20:16:10

+0

当然,我认为你展示它的工作很棒。我只是说,显然调用元素上的'.play()不适用于OP是奇怪的。你关于它在全局范围内不可用的观点可能很容易成为问题,但无法调用'.play()'是很奇怪的部分 – Ian 2013-05-12 20:18:54