Bootstrap kipinde açık bir işlevi çağırmak


179

JQuery UI iletişim kutusunu kullandım openve iletişim kutusu açıldıktan sonra yürütmek için bazı Javascript kodunu belirtebileceğiniz bir seçenek vardı . Sahip olduğum bir işlevi kullanarak iletişim kutusundaki metni seçmek için bu seçeneği kullanırdım.

Şimdi bunu bootstrap modelini kullanarak yapmak istiyorum. HTMl kodu aşağıdadır:

<div id="code" class="modal hide fade">
    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
        <h3>Modal header</h3>
    </div>
    <div class="modal-body">
        <pre>
print 'Hello World'

Ve kipi açan düğmeye gelince:

 <a href="#code" data-toggle="modal" class="btn code-dialog">Display code</a>

Düğmenin onclick dinleyicisini kullanmaya çalıştım, ancak mod mesajı görünmeden önce uyarı mesajı görüntülendi :

$( ".code-dialog" ).click(function(){
    alert("I want this to appear after the modal has opened!");
});

3
shown.bs.modalolayı, HTML belgesi en azından <div class="modal fade"><div class="modal-dialog"></div></div>yapı içerdiğinde oluşur .
Kimyasal Programcı


Yorum @Chemical Programmer selamlıyorum, cevap ile görünmelidir
Tarek

Yanıtlar:


332

Sen kullanabilirsiniz gösterilen olay neye ihtiyacınız dayalı / gösteri olayı:

$( "#code" ).on('shown', function(){
    alert("I want this to appear after the modal has opened!");
});

Gösteri: Plunker

Bootstrap 3.0 Güncelleştirmesi

Bootstrap 3.0 için gösterilen etkinliği kullanmaya devam edebilirsiniz, ancak şu şekilde kullanabilirsiniz:

$('#code').on('shown.bs.modal', function (e) {
  // do something...
})

"Events" bölümündeki Bootstrap 3.0 belgelerine bakın .


17
$("#code").on("shown.bs.modal", function(e) {})Bootstrap 3.0 için kullanın .
teewuane

en azından bu kodun çağrılması için Kimya Programcısının <div class = "modal fade"> <div class = "modal-dialog"> </div> </div> yapısına ihtiyaç duyduğu konusunda neler söylediğini dikkate aldığınızdan emin olun
whyoz

1
#codeJQuery seçici jQuery temel bileşenlerin biri anlamına gelir: w3schools.com/jquery/jquery_selectors.asp
DDW

$(document).on("shown.bs.modal", ...Genel dinleme için kullanıyorum
vladkras

1
En azından shown.bs.modal aslında mod gösterilmeden önce yürütülür. Bu benim durumumda bir sorun değil, ama bilmek iyi olabilir.
Jonny

86

çalışmaz .. $(window)bunun yerine kullanın

Göstermek için

$(window).on('shown.bs.modal', function() { 
    $('#code').modal('show');
    alert('shown');
});

Saklanmak için

$(window).on('hidden.bs.modal', function() { 
    $('#code').modal('hide');
    alert('hidden');
});

5
$ ("#modal") .on ('gösterildi', function () {alert ("Modal açıldıktan sonra bunun görünmesini istiyorum!");} Benim için çalışmıyor ama $ (pencere) çalıştı !! @viper_tkd
Krutal Modi

1
Belirli bir seçici tarafından değil, açılan / kapanan HERHANGİ bir modele bağlanmam gerekiyordu . Bu cevap bu durumda benim için iyi çalıştı.
jyoseph

Bu, modsal GUI'ye tamamen yüklenmeden önce çalışır. Modsal yüklendikten sonra modumdan veri almak istiyorum - modsal GUI henüz mevcut olmadığı için bu yöntem her şey için 'tanımsız' döndürüyor, bu nedenle alanlar ve diğer her şey henüz sorgulanamıyor. (görünmez)
FrenkyB

Bu benim için çalıştı, ancak işleyicinin içinde belirli bir modun hedeflenmesi için bir kontrol ekledim: if( $('#code').is( e.relatedTarget ) ) { ... }sayfada birden fazla öğe olduğundan.
allicarn

Doğru etkinlik adı için teşekkürler, ancak $ (window) için öğe kimliğini değiştirmeye gerek yoktur. Js ile bs4 kullanma 3.4.
Jcc.Sanabria

17

Kullanabileceğiniz showyerine shownyerine kalıcı açık sonrası, sadece modal açık önce yüke işlevini yapmak için.

$('#code').on('show.bs.modal', function (e) {
  // do something...
})

9

Bootstrap modal olayları ortaya çıkarır. shownBöyle olayı dinleyin

$('#my-modal').on('shown', function(){
  // code here
});

0

birisinin hala bir sorunu varsa, (loaded.bs.modal) kullanarak benim için mükemmel çalışan tek şey:

 $('#editModal').on('loaded.bs.modal', function () {
       console.log('edit modal loaded');

       $('.datepicker').datepicker({
            dateFormat: 'yy-mm-dd',
            clearBtn: true,
            rtl: false,
            todayHighlight: true,
            toggleActive: true,
            changeYear: true,
            changeMonth: true
        });
});

-4

Bootstrap modelini göstermek ve gizlemek için belw kodunu kullanabilirsiniz.

$('#my-model').on('shown.bs.modal', function (e) {
  // do something here...
})

ve eğer modeli gizlemek istiyorsanız aşağıdaki kodu kullanabilirsiniz.

$('#my-model').on('hidden.bs.modal', function() {
    // do something here...
});

Umarım bu cevap projeniz için yararlıdır.


7
copycat again ... kullanıcının diğer cevaplarına bak
Laurent B
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.