Javascript Src更改在Firefox中有效,而不是在IE/Chrome中

Javascript Src更改在Firefox中有效,而不是在IE/Chrome中,javascript,html,list,drop-down-menu,midi,Javascript,Html,List,Drop Down Menu,Midi,我试图创建一个下拉列表,当onchange事件触发时,该列表将在后台自动播放midi文件。这在Firefox中运行得很好,但IE和Chrome甚至没有在应该的时候启动QuickTime播放器。我已经用静态源代码测试了嵌入代码,它在所有三种浏览器中都能正常工作 <form name="music"> <select name='audiomenu' onchange="midiplay(this);"> <option value="">

我试图创建一个下拉列表,当onchange事件触发时,该列表将在后台自动播放midi文件。这在Firefox中运行得很好,但IE和Chrome甚至没有在应该的时候启动QuickTime播放器。我已经用静态源代码测试了嵌入代码,它在所有三种浏览器中都能正常工作

<form name="music">
    <select name='audiomenu' onchange="midiplay(this);">
        <option value="">No Music</option>
        <option value="midi/1.mid">Background 1</option>
        <option value="midi/2.mid">Background 2</option>
     </select>
</form>

<script type="text/javascript">
    function midiplay(what) {   
        document.getElementById('midijuke').src = what.options[what.selectedIndex].value;
    }
</script> 

<embed src="#" id="midijuke" autostart="true" loop="true" type="audio/midi" width="120" height="40"></embed>

没有音乐
背景1
背景2
函数MIDI播放(什么){
document.getElementById('midJuke').src=what.options[what.selectedIndex].value;
}

IE和Chrome也不会报告任何JavaScript错误。

只需删除整个内容并将其重新附加到文档中即可。它省去了你所有的麻烦

function midiplay(w) {   
    var j=document.getElementById('midijuke');
    j.src = w.options[w.selectedIndex].value;
    j.parentNode.insertBefore(j,j);
}
使用DOM(因为它比jQuery更容易进行DOM操作):


HTML标记属于HTML文档,而不是JavaScript字符串。包装应该放在文档中,而不是字符串中。操作DOM的正确方法是使用DOM API。

@RepWhoringPeeHaa,你有更好的建议吗?HTML5的
元素通常不支持播放MIDI文件。您复制了我的帖子、编辑和评论,并且顽固地保留了POV。更新您的答案,删除
removeChild(juke).appendChild(juke)
,现在尝试将juke附加到与容器中其他元素相同的位置(
juke.parentNode
)。哦,就是这样
juke.parentNode.insertBefore(juke,juke)
实际上应该可以工作。不过,我有点喜欢这篇文章的风格。
var juke = document.getElementById('midijuke');

juke.src = 'http://blah.com/foo.mid';

juke.parentNode.removeChild(juke).appendChild(juke);