부트 스트랩 모달이 열려 있는지 확인하는 방법으로 jquery validate를 사용할 수 있습니다.


111

모달이 열려있는 경우에만 유효성 검사를 수행해야합니다. 왜냐하면 모달을 연 다음 닫으면 모달을 여는 버튼을 누르면 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>

답변:


183

@GregPettit에서 언급 한 경쟁 조건을 피하기 위해 다음을 사용할 수 있습니다.

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

Twitter Bootstrap Modal-IsShown 에서 논의한 대로 .

모달이 아직 열리지 않으면을 .data('bs.modal')반환 undefined하므로 || {}- isShown값이 (거짓) undefined됩니다. 엄격하다면 할 수 있습니다.($("element").data('bs.modal') || {isShown: false}).isShown


2
이것에 문제가 있습니다. 모달이 열려 있지 않으면 $ ( "element"). data ( 'bs.modal')에서 'undefined'를 얻게됩니다.
Flezcano 2015

._isShown는, 내가 부트 스트랩 4 알파 사용하고 나를 위해 일한
Iftikar Urrhman 칸을

8
부트 스트랩 4에서, 그건 _isShown아니고 isShown.
elquimista

모달에 '표시된'클래스 (부트 스트랩 4)가 있는지 확인하고 있습니다. 필요에 따라 작동합니다. 어떤면에서 _isShown을 더 잘 확인하고 있습니까?
trainoasis

typescript로 솔루션을 공유해 주시겠습니까?
Surajit Biswas

80

당신이 사용할 수있는

$('#myModal').hasClass('in');

부트 스트랩 in은 모달이 열려있을 때 클래스를 추가하고 닫힐 때 제거합니다.


4
이것은 페이드 옵션과 빠른 클릭 또는 Ajax 호출을 통해 모달을 트리거하는 경우 약간 취약한 것으로 나타났습니다. 페이드의 시간 지연은 경쟁 조건을 만들 수 있습니다. 그래도 콘텐츠가 정적이고 모델이 사용자 상호 작용 중에 만 팝업 될 때 연결하는 유용한 방법입니다!
Greg Pettit 2014 년

Bootstrap 모달에서 경쟁 조건을 피하는 가장 안전하고 확실한 방법은 해당 shown.bs.modal또는 hidden.bs.modal이벤트 를 구독하는 것 입니다. 이렇게하면 이벤트 코드가 제어 될 때 대화가 터치 상태에 있지 않은 것이 확실합니다.
Eric Lloyd

Bootstrap 버전 4에서 유효합니까?
Mahdi Alkhatib

1
@MahdiAlkhatib 아니, 이것은 당신이 대체 할 수있는 부트 스트랩 (4)에서 작동하지 않습니다 'in''show'부트 스트랩 (4)에 대한
필립 스트 래트 포드

61

jQuery를 직접 사용할 수도 있습니다.

$('#myModal').is(':visible');

1
대답이 간단 할 때처럼. ajax를 사용하는 경우 onbefore에서 이것을 사용하고 false를 확인하고 반환합니다. 그러면 서버에 대한 다중 호출도 방지됩니다. 감사!
eaglei22

허용 된 답변이 정의되지 않았거나 null을 반환했습니다. 이것은 완벽하게 작동했습니다. 감사!
Alex

8

모달이 열려 있는지 확인

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

이벤트 리스너를 연결하려면

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

6

Bootstrap 2, 3 Check is any modal open in page :

if($('.modal.in').length)

호환 가능한 버전 Bootstrap 2, 3, 4+

if($('.modal.in, .modal.show').length)

Bootstrap 4+

if($('.modal.show').length)

3
나는 Bootstrap을 사용 4.1.3하고 있으며 show대신 클래스를 추가합니다 in.
Arif Hussain

4
$("element").data('bs.modal').isShown

모달이 이전에 표시되지 않은 경우 작동하지 않습니다. 추가 조건을 추가해야합니다.

$("element").data('bs.modal')

그래서 첫 등장을 고려한 대답 :

if ($("element").data('bs.modal') && $("element").data('bs.modal').isShown){
... 
}



0

다음과 같은 간단한 jQuery로 할 수 있는데 왜 복잡해집니다.

$('#myModal').on('shown.bs.modal', function (e) {
    console.log('myModal is shown');
    // Your actual function here
})
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.