Bir işlevi Twitter Bootstrap Modal'a bağlama


530

Twitter Bootstrap lib'i yeni bir projede kullanıyorum ve sayfanın bir kısmının modal kapanıştaki en son json verilerini yenilemesini ve almasını istiyorum. Belgenin herhangi bir yerinde bunu görmüyorum, birisi bana işaret edebilir veya bir çözüm önerebilir.

Belgelendirilmiş yöntemlerin kullanımıyla ilgili iki sorun

 $('#my-modal').bind('hide', function () {
   // do something ...
 });

Ben zaten bir "gizle" sınıf zaten iki yük yüklemek, böylece sayfa yükü görüntülenmez bu yüzden modal eklemek

hide sınıfını kaldırsam ve öğe kimliğini ayarlayıp yakın fonksiyona display:noneeklediğimde console.log("THE MODAL CLOSED");yukarıdaki işleve eklesem bile hiçbir şey olmaz.

Yanıtlar:


1138

Önyükleme 3 ve 4

$('#myModal').on('hidden.bs.modal', function () {
    // do something…
});

Bootstrap 3: getbootstrap.com/javascript/#modals-events

Bootstrap 4: getbootstrap.com/docs/4.1/components/modal/#events

Bootstrap 2.3.2

$('#myModal').on('hidden', function () {
    // do something…
});

Getbootstrap.com/2.3.2/javascript.html#modals → Etkinliklere bakın


1
Bu, bir nedenden ötürü, modal altbilgideki bir düğmenin üzerine geldiğinde de işe yaramıyor gibi görünüyor. Düğme normal bir gönderme düğmesidir: <giriş türü = "gönder" sınıf = "btn btn-info" value = "Git" /> Gizle üzerine gelindiğinde hide olayının nasıl tetiklenmeyeceği hakkında bir fikriniz var mı? Veya fareyle üzerine gelindiğinde işten çıkarıldığını nasıl tespit edebilirim? BTW: olay başlatılsa bile kalıcı iletişim kutusu kapanmıyor.
Guy

2
Bootstrap 3 ile bu davranışı görmüyorum, bir keman yapabilir misin?
sp00n

7
Bu cevap muhtemelen hidden.bs.modal ve hide.bs.modal arasındaki farktan bahsetmelidir. Gizli, CSS animasyonları tamamlandığında tetiklenir, ancak testlerimde animasyon yoksa asla tetiklenmez (yine de bir hata olabilir). Veri yönetimi ile çalışıyorsanız, bunun yerine hide.bs.modal kullanmak daha güvenli olabilir. Bu, .modal ('hide') çağrılır çağrılmaz. getbootstrap.com/javascript/#modals-usage - Bkz. Etkinlikler alt bölümü.
Evan Steinkerchner

2
Bootstrap 3: data-dismiss="modal"(kapat düğmesi gibi) olarak işaretlenmiş bir modal etikete tıkladığımda çalışır , ancak modalı çevreleyen siyah arka plan alanına tıkladığımda çalışmaz . Modal çıkarılır, ancak sayfa yenilenene kadar yeniden açılamaz. Ben ikisini de denedim 'hidden.bs.modal've 'hide.bs.modal'boşuna.
marquito

5
@marquito Yapabilecekleriniz (ne yaptığım) şu şekilde kullanmaktır: $('#myModal').modal({ backdrop: 'static', keyboard: false });Bu şekilde, gri alan tıklandığında veya Esc tuşuna basıldığında mod kapanmaz.
aesede

123

Bootstrap 4

$('#my-modal').on('hidden.bs.modal', function () {
  window.alert('hidden event fired!');
});

Çalışan bir örnek için bu JSFiddle'a bakın:

https://jsfiddle.net/6n7bg2c9/

Dokümanların Kalıcı Etkinlikler bölümüne bakın:

https://getbootstrap.com/docs/4.3/components/modal/#events


1
Bu gönderiyi bu tür geri aramaları uygulamak isteyen bulan herkes için, bu işlevselliği içeren diyaloglar / uyarılar / onaylar için birçok yararlı fonksiyonun yanı sıra Bootstrap için bir genişletme modülü vardır: bootboxjs.com
jkriddle

@Ricardo Lima'nın aşağıdaki yanıtı, jQuery / bootstrap'deki olayları izlemek için doğru yöntem
sbonami

meatballs hala çalışma örneği için bir yukarı oy ... bağlama rağmen itiraz edilmiştir.
Stephen Patten

@ 100acrewood Dostum, şimdi bu bir keşif! Teşekkür ederim! re: bootboxjs.com
Stephen Patten

46

Bootstrap 3'ü başlatma ( düzenleme: Bootstrap 4'te hala aynı ), olayları tetikleyebileceğiniz 2 örnek vardır:

1. Kalıcı "gizle" etkinliği başladığında

$('#myModal').on('hide.bs.modal', function () { 
    console.log('Fired at start of hide event!');
});  

2. Kalıcı "gizle" etkinliği tamamlandığında

$('#myModal').on('hidden.bs.modal', function () {
    console.log('Fired when hide event has finished!');
});

Ref: http://getbootstrap.com/javascript/#js-events


1
Bu benim Bootstrap modal hata düzeltmek yardımcı oldu nerede herhangi bir modal yakın vücuda 15px dolgu-sağ eklemek olacaktır. Teşekkürler!
Sam Malayek

2
2 etkinliği göstermek için iyi. Benim gibi yeni başlayanlar için, etkinliğin başlatılması için bunun modalın altına yerleştirilmesi gerektiğini belirtmek daha iyidir.
Lynnell Emmanuel Neri

18

"Canlı" yerine "on" etkinliğini kullanmanız, ancak bunu belge nesnesine atamanız gerekir:

kullanın:

$(document).on('hidden.bs.modal', '#Control_id', function (event) {
// code to run on closing
});

1
Mod dinamik olarak eklenmişse, bunu böyle yapmanız gerekir. Beni bir ton kurtardı.
Dylan Vander Berg

15
$(document.body).on('hidden.bs.modal', function () {
    $('#myModal').removeData('bs.modal')
});

6

Bootstrap içine kanca olabilir olayları sağlayan modal bir yangın istiyorsanız gibi, olayı kullanabileceğiniz kullanıcıdan kalıcı gizlenmiş olarak tamamladı hidden.bs.modal böyle olayı

    /* hidden.bs.modal event example */
    $('#myModal').on('hidden.bs.modal', function () {
          window.alert('hidden event fired!');
    })

Çalışan bir kontrol keman burada burada kalıcı yöntemler ve olaylar hakkında daha fazla bilgi Belgeler


4

Bootstrap 4:

$('#myModal').on('hidden.bs.modal', function (e) {
   // call your method
})

hide.bs.modal : Bu olay, hide örneği yöntemi çağrıldığında hemen tetiklenir.

hidden.bs.modal : Modun kullanıcıdan gizlenmesi bittiğinde bu olay tetiklenir (CSS geçişlerinin tamamlanmasını bekler).


Bu yol BS3 için de geçerlidir. Lütfen BS2 (kullanımdan kaldırıldı) yolu için kabul edilen cevaba bakın.
Roland

3

Bunu şöyle yaparım:

$('body').on('hidden.bs.modal', '#myModal', function(){ //this call your method });

Gerisi zaten başkaları tarafından yazılmıştır. Ayrıca belgelerin okunmasını da tavsiye ederim: jquery - on yöntemi


2

hide.bs.modalModal kapandığında hangi tetikleyici olayları gibi bootstrap olaylarıyla ilgili birçok cevap gördüm .

Bu olaylarla ilgili bir sorun var: moddaki tüm pop-up'lar (popoverler, araç ipuçları vb.) Bu etkinliği tetikleyecek.

Bir modal kapandığında olayı yakalamanın başka bir yolu daha vardır.

$(document).on('hidden','#modal:not(.in)', function(){} );

inModsal açıkken Bootstrap sınıfı kullanır . Olay tetiklendiğinde hiddensınıf inhala tanımlandığından olayı kullanmak çok önemlidir hide.

IE8 Jquery :not()seçiciyi desteklemediğinden bu çözüm IE8'de çalışmaz .


2

Bazılarıyla aynı sorunları yaşıyordum

$('#myModal').on('hidden.bs.modal', function () {
// do something… })

Bunu sayfanın altına yerleştirmelisiniz, en üste yerleştirmek asla etkinliği tetiklemez.


Aslında. Etkinliği başlatmak için modun altına yerleştirilmesi gerektiğini belirtmeniz iyi bir şey.
Lynnell Emmanuel Neri

Kuralları bundan biraz daha sıkı tanımlarım. JQuery seçici $("#myModal")çağrıldığında, DOM'da myModalihtiyaç duyulan bir kimliğe sahip HTML öğesi . Bu nedenle, bu kodu sayfanın üst kısmında olabilir, ancak $(document).on("ready", function(){ ... });(veya öğeyle DOM doldurulduktan sonra çağrılan benzer bir işlevin) içine yerleştirilmiş olabilirsiniz .
Andy Gee

0

her modal kapanışta bir işlev başlatmak istiyorsanız, bu yöntemi kullanabilirsiniz,

$(document).ready(function (){
    $('.modal').each(function (){
        $(this).on('hidden.bs.modal', function () {
            //fires when evey popup close. Ex. resetModal();
        });
    });
});

Bu yüzden her seferinde kalıcı kimlikler belirtmeniz gerekmez.

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.