如何检查bootstrap模式是否打开,所以我可以使用jquery验证

Mar*_*dez 102 validation jquery modal-dialog twitter-bootstrap

我需要在模态打开时进行验证,因为如果我打开它,然后我关闭它,并且我按下打开模态的按钮它不起作用,因为它正在进行jquery验证,但不是显示因为模态被解雇了.

所以我想广告一个jquery如果模态是开放的,所以我确实,这可能吗?

<script>
$(document).ready(function(){

var validator =$('#form1').validate(
 {
  ignore: "",
  rules: {

usu_login: {
  required: true
},
usu_password: {
  required: true
},
usu_email: {
  required: true
},
usu_nombre1: {
  required: true
},
usu_apellido1: {
  required: true
},
usu_fecha_nac: {
  required: true
},
usu_cedula: {
  required: true
},
usu_telefono1: {
  required: true
},
rol_id: {
  required: true
},
dependencia_id: {
  required: true
},
  },

  highlight: function(element) {
$(element).closest('.grupo').addClass('has-error');
        if($(".tab-content").find("div.tab-pane.active:has(div.has-error)").length == 0)
        {
            $(".tab-content").find("div.tab-pane:hidden:has(div.has-error)").each(function(index, tab)
            {
                var id = $(tab).attr("id");

                $('a[href="#' + id + '"]').tab('show');
            });
        }
  },
  unhighlight: function(element) {
$(element).closest('.grupo').removeClass('has-error');
  }
 });

}); // end document.ready

</script>
Run Code Online (Sandbox Code Playgroud)

Bri*_*unt 165

为避免竞争条件@GregPettit提及,可以使用:

($("element").data('bs.modal') || {})._isShown    // Bootstrap 4
($("element").data('bs.modal') || {}).isShown     // Bootstrap <= 3
Run Code Online (Sandbox Code Playgroud)

正如Twitter Bootstrap Modal - IsShown中所讨论的那样.

当模态尚未打开时,.data('bs.modal')返回undefined,因此|| {}- 将产生isShown(假的)值undefined.如果你严格要求就可以做到($("element").data('bs.modal') || {isShown: false}).isShown

  • 在Bootstrap 4中,它是`_isShown`,而不是`isShown`. (8认同)
  • 这有一个问题,如果模态没有打开,你将从 $("element").data('bs.modal') 得到 'undefined' (3认同)

tle*_*eef 75

您可以使用

$('#myModal').hasClass('in');
Run Code Online (Sandbox Code Playgroud)

Bootstrap in在模态打开时添加类,在关闭时删除它

  • 这通过淡入淡出选项和快速点击或通过Ajax调用触发模态变得有点脆弱.褪色的时间延迟会造成竞争条件.当内容是静态的并且模型仅在用户交互期间弹出时,仍然是一种有用的方式来挂钩它! (4认同)
  • @MahdiAlkhatib 不,这在 Bootstrap 4 中不起作用。对于 Bootstrap 4,您可以将 'in' 替换为 'show' 。 (2认同)

ale*_*999 48

您也可以直接使用jQuery.

$('#myModal').is(':visible');
Run Code Online (Sandbox Code Playgroud)

  • 就像答案很简单一样。如果使用 ajax,我会在 onbefore 中使用它并检查并返回 false,这样也可以防止对服务器的多次调用。谢谢! (2认同)

小智 11

Bootstrap 2 , 3检查是否在页面中打开了任何模式:

if($('.modal.in').length)
Run Code Online (Sandbox Code Playgroud)

兼容版本Bootstrap 2、3、4+

if($('.modal.in, .modal.show').length)
Run Code Online (Sandbox Code Playgroud)

只有引导程序 4+

if($('.modal.show').length)
Run Code Online (Sandbox Code Playgroud)

  • 我正在使用 Bootstrap `4.1.3`,它添加了 `show` 类而不是 `in`。 (4认同)

小智 11

您还可以使用

$('#myModal').hasClass('show');
Run Code Online (Sandbox Code Playgroud)

  • 这对我的 Bootstrap 5 有用 (3认同)

Raj*_*ury 6

检查模态是否打开

$('.modal:visible').length && $('body').hasClass('modal-open')

附加事件监听器

$(document).on('show.bs.modal', '.modal', function () {
    // run your validation... ( or shown.bs.modal )
});
Run Code Online (Sandbox Code Playgroud)


小智 5

$("element").data('bs.modal').isShown
Run Code Online (Sandbox Code Playgroud)

如果以前没有显示模态,则无效.您需要添加额外条件:

$("element").data('bs.modal')
Run Code Online (Sandbox Code Playgroud)

所以答案考虑到第一次出现:

if ($("element").data('bs.modal') && $("element").data('bs.modal').isShown){
... 
}
Run Code Online (Sandbox Code Playgroud)