3 回答
TA贡献1871条经验 获得超13个赞
当您执行AJAX请求时,请确保您没有替换包含实际模态窗口的容器,因为当您尝试关闭它时,Bootstrap将无法找到对它的引用。在Ajax完整处理程序中删除模态然后替换数据。
如果这不起作用,您可以通过执行以下操作来强制它消失:
$('#your-modal-id').modal('hide');
$('body').removeClass('modal-open');
$('.modal-backdrop').remove();
TA贡献1784条经验 获得超7个赞
确保您$.modal()应用模态行为的初始调用不会传递超出预期的元素。如果发生这种情况,它将最终为集合中的EACH元素创建一个带有背景元素的模态实例。因此,看起来背景可能已被遗忘,实际上你正在查看其中一个副本。
就我而言,我试图使用这样的代码动态创建模态内容:
myModal = $('<div class="modal">...lots of HTML content here...</div><!-- end modal -->');
$('body').append(myModal);
myModal.modal();
在这里,结束</div>标记之后的HTML注释意味着myModal实际上是两个元素的jQuery集合 - div和注释。他们两个都尽职尽责地变成了模态,每个都有自己的背景元素。当然,除了背景之外,评论所形成的模态是不可见的,所以当我关闭真实模态(div)时,它看起来就像是留下了背景。
TA贡献1853条经验 获得超9个赞
我只是花了太长时间才解决这个问题:)
虽然提供的其他答案都是有用且有效的,但是我从Bootstrap中有效地重新创建模态隐藏功能似乎有点麻烦,所以我找到了一个更清晰的解决方案。
问题是当你打电话时会发生一系列事件
$("#myModal").modal('hide');
functionThatEndsUpDestroyingTheDOM()
当您因为AJAX请求而替换一堆HTML时,模态隐藏事件无法完成。但是,当一切都完成时,Bootstrap会触发一个事件,你可以像这样挂钩:
$("#myModal").modal('hide').on('hidden.bs.modal', functionThatEndsUpDestroyingTheDOM);
希望这有用!
- 3 回答
- 0 关注
- 560 浏览
添加回答
举报