【发布时间】:2011-10-07 19:37:56
【问题描述】:
我的页面正文中出现了几个音频元素。它们看起来像这样。
<audio id="sound1" preload="auto">
<source id="sound1source" src="../../Content/Audio/gau.mp3">
//add .ogg here later
</audio>
<audio id="sound2" preload="auto">
<source id="sound2source" src="../../Content/Audio/mah.mp3">
//add .ogg here later
</audio>
当用户将鼠标悬停在某些 div 上时播放音频。这是触发它的代码。
var audio = $("#sound1")[0];
$("#ChoiceA").mouseenter(function () {
audio.play();
});
var audio2 = $("#sound2")[0];
$("#ChoiceB").mouseenter(function () {
audio2.play();
});
上面的一切都很好。当我尝试在进行 ajax 调用后动态更改源元素时,就会出现我的问题。这是我的 javascript 实现了这一点。
var src1 = "../../Content/Audio/" + data.nouns[0].Audio1 + ".mp3";
var src2 = "../../Content/Audio/" + data.nouns[1].Audio1 + ".mp3";
$("#sound1source").attr("src", src1);
$("#sound2source").attr("src", src2);
当我在触发 ajax 调用以更改音频元素的源路径后检查页面时,我看到源 已更新。那里没问题。问题是新路径指向的音频无法播放。
我在w3.org 上找到了这个注释“当元素已经插入视频或音频元素时动态修改源元素及其属性将无效。要更改正在播放的内容,要么直接在media元素上使用src属性,或者在对源元素进行操作后调用media元素上的load()方法。"
w3.org 上的评论似乎是相关的,所以我尝试调用 $('#sound1').load() 和 $('#sound1source').load()。都没有解决我的问题。
谁能告诉我我做错了什么?如果我需要在动态更改 src 后重新加载音频元素,我该怎么做?
-------------更新-------------
根据 Swatkins 的建议,我创建了以下函数来在用户将鼠标悬停在目标 div 上时创建音频标签。不幸的是,这也没有解决问题。
function attachAudio1(src) {
$('#audio1').remove();
var audio = $('<audio>');
audio.attr("src", src);
audio.attr("id", "audio1");
audio.appendTo('body');
attachPlayAction();
};
function attachPlayAction() {
var audio = $("#audio1")[0];
$('#ChoiceA').live('mouseenter', function () {
audio.play();
});
};
【问题讨论】:
标签: javascript jquery html