2012-04-18 4 views
1

onchange가 백그라운드에서 자동으로 midi 파일을 재생하도록 드롭 다운 목록을 만들려고합니다. 이것은 Firefox에서 잘 작동하지만 IE와 Chrome은 QuickTime 플레이어를 가져 오지 않습니다. 정적 소스를 사용하여 소스 코드를 테스트했으며 세 브라우저 모두에서 제대로 작동합니다.Javascript src 변경이 IE/Chrome이 아닌 Firefox에서 작동합니다.

<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> 

IE와 Chrome은 자바 스크립트 오류를보고하지 않습니다.

+1

퀵타임 플레이어를 ??? (미안 자신에게 도움이되지 못했습니다) – PeeHaa

+0

@RepWhoringPeeHaa, 더 좋은 제안이 있으십니까? MIDI 파일은 일반적으로 HTML5의 '

답변

0

모든 것을 제거하고 문서에 다시 첨부하기 만하면됩니다. 모든 번거 로움을 덜어줍니다.

/편집 : 설명

function midiplay(w) { 
    var j=document.getElementById('midijuke'); 
    j.src = w.options[w.selectedIndex].value; 
    j.parentNode.insertBefore(j,j); 
} 
+0

죄송합니다, 무슨 뜻인지 잘 모르겠습니다. – user1342220

+0

@ user1342220 답변을 업데이트했습니다. –

2

그냥 전체를 제거하고 문서를 다시 연결합니다. 모든 번거 로움을 덜어줍니다.

/편집 : DOM을 사용하여 설명

(가 DOM 조작 jQuery를 더 쉽게 않기 때문에) 정말

var juke = document.getElementById('midijuke'); 

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

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

재밌는 당신이 내 대답을 복사하고 어떻게'주크'가 다른 위치에 추가 될 수 있었는지 그것은 그것의 부모 안에 있었었다. 그래서 래퍼를 자리 표시 자로 사용하고 있습니다. –

+0

재미있는 마크 업은 JavaScript 문자열보다 HTML 문서에서 더 낫습니다. 래퍼는 문자열이 아닌 문서에 있어야합니다. 제 요점은 DOM을 사용한 DOM 조작이 쉽고 문자열과 달러 기호가 엉망이 아닌 실제 읽을 수있는 코드가된다는 것입니다. –

+0

글쎄, 지금은 당신에게 단지 "마스터 앵무새"배지가 있어야한다고 생각합니다. –

관련 문제