多个模态框框,当关闭某一个的时候, body 上面的Class modal-open 被移除了

2022-03-28 19:30:28 浏览数 (1)

bootstrap官方网站上说的很明白:

不支持同时打开多个模态框

千万不要在一个模态框上重叠另一个模态框。要想同时支持多个模态框,需要自己写额外的代码来实现。

但是在实际使用中笔者确实需要打开两个对话框,应用场景如下:

A对话框里面点击按钮打开B对话框(关闭A对话框,然后打开B对话框),在B对话框进行相应操作后通过

代码语言:javascript复制
BootstrapDialog.confirm方法弹出提示对话框,提示用户是否要进行某个操作,确认后关闭B对话框,然后打开A对话框,然后奇怪的问题就出现了,A对话框无法滚动至底部(A对话框显示内容较多所以高度比较高)。

问题产生的原因:

代码语言:javascript复制
BootstrapDialog.confirm对话框关闭的速度要比A对话框显示的速度滞后,这样就会出现A对话框的modal("show")调用滞后confirm对话框才消失,confirm对话框的消失会删除body的modal-open class属性,这个属性的缺失导致了A对话框无法滚动到底部的问题。

所以要解决这个问题就必须确保confirm对话框消失后再调用A对话框的modal("show")方法,下面就围绕这个思路给出解决方法:

1.

代码语言:javascript复制
     BootstrapDialog.confirm({undefined
 title: "xx",
 message: "xxx?"',
 //size: BootstrapDialog.SIZE_LARGE,
 type: BootstrapDialog.TYPE_PRIMARY, // <-- Default value is BootstrapDialog.TYPE_PRIMARY
 closable: false, // <-- Default value is false
 draggable: true, // <-- Default value is false
 btnCancelLabel:'放弃',
 btnCancelClass: 'btn-primary',// <-- Default value is 'Cancel',
 btnOKLabel:'确定', // <-- Default value is 'OK',
 btnOKClass: 'btn-danger', // <-- If you didn't specify it, dialog type will be used,
 callback:function(result) {undefined
 $('.modal').on('hidden.bs.modal', function (){
       if($('.modal.in').length > 0){
          $("body").addClass("modal-open");
       }          

     });  

                                         if(result) {
                                            alert('Yup.');
                                            }else {
                                                alert('Nope.');
                                            }

 }
 });

上面标红部分就是解决方法,希望帮到遇到类似问题的朋友

0 人点赞