$("body").on("click", "button", audioelement.play());
我能看到的第一件事是你的按鈕處理程序將無法按預期運行 - 它會嘗試因爲您直接調用play
方法。其次,play
方法需要音頻元素上被調用,而不是JQuery的元件,因此...audioelement.play is not a function
誤差上。
試試這個:
$("body").on("click", "button", function() { audioelement[0].play(); });
編輯:樓主的意圖是讓script標籤可重複使用在某種WYSIWG設置,小提琴的片段+摘要考慮到這一點更新。
Click to see fiddle
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<a href="http://www.freesfx.co.uk/rx2/mp3s/5/16797_1460740933.mp3">SOUND-1</a>
<script>
// Add buttons and otherwise manipulate the dom
function LinkToAudio(p_element, p_callback) {
var audioURL = $(p_element).attr('href');
var audioName = $(p_element).text();
// Dom for the audio tag
var audioTag = '<audio src="' + audioURL + '" type="audio/mpeg" preload="none"></audio>';
// Dom for the play button
var audioPlayButton = '<button id="audio">Play Sound above</button>';
// Add a audio tag and play button after the element
$(p_element).after('<br/>' + audioTag + '<br/>' + audioPlayButton + '<br/>');
\t // Add the callback to the button
$(p_element).nextAll('button:first').on('click', p_callback);
}
// Define our button click handler
function AudioButtonHandler(evt) {
\t // Once clicked, find the first audio tag located before the button
\t var relativeAudioTag = $(evt.target).prevAll('audio:first')[0];
\t console.log(evt.target, relativeAudioTag);
// Play the sound!
relativeAudioTag.play();
}
var thisAudio = $('a[href$="mp3"]:last');
LinkToAudio(thisAudio, AudioButtonHandler);
</script>
<a href="http://www.freesfx.co.uk/rx2/mp3s/5/16983_1461335348.mp3">SOUND-2</a>
<a href="http://www.freesfx.co.uk/rx2/mp3s/4/16539_1460655601.mp3">SOUND-3</a>
<script>
// Add buttons and otherwise manipulate the dom
function LinkToAudio(p_element, p_callback) {
var audioURL = $(p_element).attr('href');
var audioName = $(p_element).text();
// Dom for the audio tag
var audioTag = '<audio src="' + audioURL + '" type="audio/mpeg" preload="none"></audio>';
// Dom for the play button
var audioPlayButton = '<button id="audio">Play Sound above</button>';
// Add a audio tag and play button after the element
$(p_element).after('<br/>' + audioTag + '<br/>' + audioPlayButton + '<br/>');
\t // Add the callback to the button
$(p_element).nextAll('button:first').on('click', p_callback);
}
// Define our button click handler
function AudioButtonHandler(evt) {
\t // Once clicked, find the first audio tag located before the button
\t var relativeAudioTag = $(evt.target).prevAll('audio:first')[0];
\t console.log(evt.target, relativeAudioTag);
// Play the sound!
relativeAudioTag.play();
}
var thisAudio = $('a[href$="mp3"]:last');
LinkToAudio(thisAudio, AudioButtonHandler);
</script>
謝謝,但在這撥弄https://jsfiddle.net/jfyeqy7d/2/我插入第三聲音文件下面腳本的克隆。現在生成的按鈕正在播放相同的聲音文件,而不是上面的聲音文件。認爲audioelement [0] .play()是有罪的... – Madamadam
在你提供的小提琴上,我仍然可以看到內聯函數的調用。你有沒有嘗試過使用上面提供的匿名函數?我分叉你的小提琴,並更換第16行上的按鈕處理程序: https://jsfiddle.net/wymy1abv/1/ 此外,腳本將觸發並找到最後一個音頻標籤相對於其位置的標籤,所以爲了讓它找到最後一個標籤,你必須在腳本全部移動後才能使用腳本。看到這個小提琴: https://jsfiddle.net/drscodelab/27u6eod8/ – DabaloSe7eN
如果你希望你的腳本來找到最後一個/音頻標籤,無論在DOM中的相對位置,可以等到文檔前準備找到最後一個例子。如果這不與您當前的設置衝突,我會建議使用這種方法。看到這個小提琴 - https://jsfiddle.net/drscodelab/0s0h9bga/ – DabaloSe7eN