我的目標是播放音頻文件,使用QuickTime插件和收聽音頻結束事件,然後更新與另一個文件中的音頻對象播放等如何檢測元件Ajax更新每次
這裏是音頻元素(我使用primefaces4):
<h:panelGroup id="questionsAudioPG">
<object width="2" height="2" data="#{testBean.audioPath}" id="speechAudio"
name="speechAudio" >
<param name="CONTROLLER" value="false" />
<param name="AUTOPLAY" value="true" />
<param name="LOOP" value="false" />
<param name="POSTDOMEVENTS" value="true" />
<param name="ENABLEJAVASCRIPT" value="true" />
</object>
</h:panelGroup>
這裏是我的javascript代碼:
<h:outputScript type="text/javascript">
$(document).ready(function(){
RegisterListener('qt_ended', 'speechAudio', 'speechAudio_embed', audioEndedEventFired);
});
function audioEndedEventFired() {
audioEnded();
}
function myAddListener(obj, evt, handler, captures) {
if (document.addEventListener)
obj.addEventListener(evt, handler, captures);
else
// IE
obj.attachEvent('on' + evt, handler);
}
function RegisterListener(eventName, objID, embedID, listenerFcn) {
var obj = document.getElementById(objID);
if (!obj)
obj = document.getElementById(embedID);
if (obj)
myAddListener(obj, eventName, listenerFcn, false);
}
</h:outputScript>
現在發生的事情是,我的聽衆是在FIR正常工作但是在我的處理函數通過ajax更新頁面之後,事件再也不會被解僱了!
我想這是因爲DOM發生了變化,我需要重新註冊事件監聽器後,每個ajax更新到音頻元素。
順便說一句:qt事件只在chrome上觸發,並沒有在firefox中觸發。
任何幫助表示讚賞。
那麼如何實現這個解決方案呢?我試過jquery(document).on函數,但沒有工作,可能是我實現它錯了。 – Dorgham
@MohammadDorgham - 我不知道qt_ended事件是否起泡,所以我不知道它是否適用於委託事件處理。使用jQuery的'.on()'進行委託事件處理的正確方法在[這裏]中有描述(http://stackoverflow.com/questions/8752321/jquery-live-vs-on-method-for-adding-a- click-event-after-loading-dynamic-ht/8752376#8752376)and [here](http://stackoverflow.com/questions/9814298/does-jquery-on-work-for-elements-that-are-added -after-的事件處理程序,是-CRE/9814409#9814409)。我還在我的答案中添加了另一個選項,您可以再次調用RegisterListener()。 – jfriend00
何時再次調用註冊函數?我的意思是我怎麼知道文件被重新加載?這是我的主要問題。 – Dorgham