Bootstrap modal'in açık olup olmadığı nasıl kontrol edilir, böylece jquery validate'i kullanabilirim


111

Sadece bir mod açıksa doğrulama yapmam gerekiyor, çünkü eğer onu açarsam ve sonra kapatırsam ve modu açan düğmeye basarsam çalışmaz çünkü jquery doğrulamasını yapıyor, ama değil gösteriliyor çünkü modal reddedildi.

Bu yüzden, eğer mod açıksa bir jquery eklemek istiyorum, böylece doğrulayacağım, bu mümkün mü?

<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>

Yanıtlar:


183

@GregPettit'in bahsettiği yarış koşulundan kaçınmak için aşağıdakiler kullanılabilir:

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

Twitter Bootstrap Modal - IsShown'da tartışıldığı gibi .

Modal henüz açılmadığında, .data('bs.modal')geri döner undefined, dolayısıyla || {}- isShown(yanlış) değeri yapar undefined. Eğer katılık içindeyseniz, biri yapabilir($("element").data('bs.modal') || {isShown: false}).isShown


2
Bununla ilgili bir sorun var, eğer mod açık değilse, $ ["element"]. Data ('bs.modal') 'den' undefined 'alacaksınız
Flezcano

._isShown benim için çalıştı, bootstrap 4 alpha kullanıyorum
Iftikar Urrhman Khan

8
Bootstrap 4'te öyle _isShowndeğil isShown.
elquimista

Modal'in 'gösterilen' sınıfına (bootstrap 4) sahip olup olmadığını kontrol ediyorum - ihtiyacım olduğu gibi çalışıyor. _İsShown'ı kontrol etmek bir şekilde daha mı iyi?
trainoasis

Lütfen çözümü daktilo ile paylaşır mısınız?
Surajit Biswas

81

Kullanabilirsiniz

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

Bootstrap in, modal açıkken sınıfı ekler ve kapatıldığında kaldırır


4
Bu, solma seçeneği ve hızlı tıklamalar veya bir Ajax çağrısı yoluyla bir modal tetikleme ile biraz kırılgan hale gelir. Solmanın zaman gecikmesi yarış koşulları yaratabilir. Yine de, içerik statik olduğunda ve model yalnızca kullanıcı etkileşimi sırasında ortaya çıktığında ona bağlanmanın yararlı bir yolu!
Greg Pettit

Bir Bootstrap modelinde bir yarış koşulundan kaçınmanın en güvenli ve kesin yolu, shown.bs.modalya da hidden.bs.modaletkinliklerine abone olmaktır . Bu şekilde, olay kodunuz kontrol altına alındığında, iletişim kutusunun hassas bir durumda olmadığından emin olursunuz.
Eric Lloyd

Bootstrap sürüm 4'te geçerli midir?
Mahdi Alkhatib

1
@MahdiAlkhatib Hayır, bu Bootstrap 4'te çalışmıyor. Bootstrap 4 'in'ile değiştirebilirsiniz 'show'.
Philip Stratford

61

Doğrudan jQuery'yi de kullanabilirsiniz.

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

1
Cevap basit olduğunda olduğu gibi. Ajax kullanıyorsanız, bunu onbefore içinde kullanır ve kontrol edip yanlış döndürürüm, bu şekilde sunucuya birden fazla çağrı yapılmasını da engeller. Teşekkürler!
eaglei22

Kabul edilen yanıt tanımsız veya boş olarak döndürüldü. Bu kusursuz çalıştı. Teşekkürler!
Alex

8

Modal açık olup olmadığını kontrol edin

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

Bir olay dinleyicisi eklemek için

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

6

Bootstrap 2, 3 Check, sayfada açık olan herhangi bir mod var mı:

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

uyumlu sürüm Bootstrap 2, 3, 4+

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

Sadece Bootstrap 4+

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

3
Bootstrap kullanıyorum 4.1.3ve showyerine sınıf ekliyor in.
Arif Hussain

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

modal daha önce gösterilmediyse çalışmaz. Ek bir koşul eklemeniz gerekecek:

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

bu yüzden cevap ilk görünüşü dikkate alarak:

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



0

Aşağıdaki gibi basit jQuery ile yapılabiliyorken işleri neden karmaşıklaştıralım?

$('#myModal').on('shown.bs.modal', function (e) {
    console.log('myModal is shown');
    // Your actual function here
})
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.