【发布时间】:2014-06-20 22:17:44
【问题描述】:
我正在尝试监听两个 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 on bootply
【问题讨论】:
-
@PSL 使用
resolve()完美运行。感谢您的帮助! -
@Mr.Dave,据我所知,
shown事件似乎总是在loaded事件之后触发。如果没有要显示的内容,则没有理由完成显示模式。我认为您只需收听shown事件就安全了。
标签: jquery twitter-bootstrap events jquery-deferred