最佳答案
我显示了一个 Bootstrap 模态窗口加载时执行 AJAX 调用。当加载模式应该显示时,我广播了一个“ Progress. init”事件; 当我想隐藏模式时,我广播了一个“ Progress. Finish”事件。在某些情况下,模态显示后会很快隐藏,导致模态背景保留在屏幕上。后续隐藏元素的调用不会移除背景。我也不能简单地删除所有的背景,因为其他模态窗口可能显示在加载窗口。我已经把一个 Jsfiddle放在一起,通过简单地调用模态函数(而不是触发事件)来演示这个问题。
var loadingModal = $("#loadingModal");
$("#btnShow").click(function () {
loadingModal.modal("show");
//hide after 3 seconds
setTimeout(function () {
loadingModal.modal("hide");
}, 3000);
});
$("#btnProblem").click(function () {
//simulate a loading screen finishing fast, followed by another loading screen
loadingModal.modal("show");
loadingModal.modal("hide");
loadingModal.modal("show");
//Again simulate 3 seconds
setTimeout(function () {
loadingModal.modal("hide");
}, 3000);
});
还有 HTML:
<div id="loadingModal" class="modal fade">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<p>Loading...</p>
</div>
</div>
</div>
</div>
<button id="btnShow">Show Loading</button>
<button id="btnProblem">Cause show/hide problem</button>
理想情况下,我希望在调用 mode (“ hide”)之前不用等待指定的时间就能解决这个问题。换句话说,我想尽量避免这样的事情:
elem.on("progress.finish", function () {
window.setTimeout(loadingModal.modal("hide");
}, 750);
我也试过从 bootstrap 订阅 hidden.bs.mode 和 shown.bs.mode 事件,试图在需要的时候显示/隐藏元素,但是可能会出错... ... 有什么办法可以让这个模式显示/隐藏吗?