我正試圖傾聽兩個JavaScript事件。兩者都需要發生,但我不知道它們將以何種順序發生。在這兩種情況都發生之前,我不想運行我的代碼。我可以與jQuery的事件處理程序附加函數一起使用延遲事件嗎?如何偵聽兩個異步的附加事件處理程序?
具體而言,我想等到具有遠程加載內容的引導模式已完成顯示和加載。
單擊此超鏈接顯示模式,使用jquery的load
方法在超鏈接中加載頁面,並將加載的頁面內容插入到模式中。
<a href="http://www.example.com" data-toggle="modal" data-target="#mymodal">Click Here</a>
目標模式:
<div class="modal fade" id="mymodal>
<div class="modal-dialog">
<div class="modal-content"></div>
</div>
</div>
我的失敗嘗試連接該事件偵聽器和使用承諾,知道什麼時候這兩個事件都被解僱。我認爲這裏的問題在於,承諾告訴我,聽衆是依附的,而不是事件已經解僱。
var loaded = $(".modal").on('loaded.bs.modal', function(evt) {
console.log("content loaded");
}).promise();
var shown = $(".modal").on('shown.bs.modal', function(evt) {
console.log("modal visible");
}).promise();
$.when(loaded, shown).done(function(load, show) {
console.log("content loaded and modal visible");
});
Demo上bootply
嘗試http://www.bootply。com/YWcJsaXbpq – PSL
@PSL使用'resolve()'完美地工作。感謝您的幫助! –
@ Mr.Dave,據我所知,看起來''shown'事件總是會在'loaded'事件之後觸發。如果沒有要顯示的內容,沒有理由完成顯示模式。我想你只需要聽着'shown'事件就安全了。 – zzzzBov