2013-05-12 33 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