我试图在另一个模态对话框上打开多个引导模态。 但问题是当我通过点击模态背景页面外部关闭第二个模态时开始滚动。 我不希望这样。
这是HTML代码,
<div class="modal fade" id="test-modal" data-modal-index="1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4 class="modal-title">Modal title 1</h4>
</div>
<div class="modal-body">
<p>One fine body…</p>
<button class="btn btn-default" data-toggle="modal" data-target="#test-modal-2">Launch Modal 2</button>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<div class="modal fade" id="test-modal-2" data-modal-index="2">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>
<h4 class="modal-title">Modal title 2</h4>
</div>
<div class="modal-body">
<p>One fine body…</p>
<button class="btn btn-default" data-toggle="modal" data-target="#test-modal-3">Launch Modal 3</button>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary">Save changes</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
这是小提琴链接, https://jsfiddle.net/cLwj6jgw/
答案 0 :(得分:1)
将$('body').css('overflow-y', 'hidden');
添加到hide.bs.modal
功能
$('.modal').on('hide.bs.modal', function(){
var $dialog = $(this);
var previousDialog = $dialog.data('previous-dialog');
if (previousDialog){
previousDialog.removeClass('aside');
$dialog.data('previous-dialog', undefined);
}
$('body').css('overflow-y', 'hidden');
});
注意:如果,在关闭所有模态后解决方案禁用正文滚动,要启用正文滚动,我们可以在模态1上收听hide.bs.modal
事件,然后使用以下脚本返回滚动条。
$('#test-modal').on('hide.bs.modal', function () {
$('body').css('overflow-y', '');
});
更优雅的解决方案
正如您在此处使用data-modal-index
<div class="modal fade" id="test-modal" data-modal-index="1">
在var
事件中创建hide.bs.modal
var Dialogindex = $dialog.data('modal-index');
并使用if / else
简单检查模式并启用和禁用滚动
if(Dialogindex==1){
$('body').css('overflow-y', '');
} else {
$('body').css('overflow-y', 'hidden');
}
脚本将
$('.modal').on('hide.bs.modal', function () {
var $dialog = $(this);
var previousDialog = $dialog.data('previous-dialog');
var Dialogindex = $dialog.data('modal-index');
if (previousDialog) {
previousDialog.removeClass('aside');
$dialog.data('previous-dialog', undefined);
}
if(Dialogindex==1){
$('body').css('overflow-y', '');
} else {
$('body').css('overflow-y', 'hidden');
}
});
如果模态卡住
First Modal Stuck if 2nd modal opened and closed
OP指出,如果第一个模态高度超过可见页面高度,并且在关闭第2个,第3个和第4个模态后,第一个模态卡住了,原因(可能是)twitter bootstrap中的一个错误,它似乎在删除如果打开2个或更多个模态,则来自第一个模态体的modal-open
类。
这种情况下的解决方案是
开放平均长度为1,然后将modal-open
类添加到页面正文
if ($('.modal:visible').length) {
$('body').addClass('modal-open');
}
同时将bs隐藏事件从hide.bs.modal
更改为hidden.bs.modal
并删除了真实条件if(Dialogindex==1)
并将其更改为if(Dialogindex)
脚本将
$('.modal').on('hidden.bs.modal', function () {
var $dialog = $(this);
var previousDialog = $dialog.data('previous-dialog');
var Dialogindex = $dialog.data('modal-index');
if (previousDialog) {
previousDialog.removeClass('aside');
$dialog.data('previous-dialog', undefined);
}
if(Dialogindex){
if ($('.modal:visible').length) {
$('body').addClass('modal-open');
}
$('body').css('overflow-y', '');
} else {
$('body').css('overflow-y', 'hidden');
}
});