Memanggil fungsi pada modal bootstrap terbuka


179

Saya dulu menggunakan dialog JQuery UI, dan ada openopsi, di mana Anda dapat menentukan beberapa kode Javascript untuk dijalankan setelah dialog dibuka. Saya akan menggunakan opsi itu untuk memilih teks dalam dialog menggunakan fungsi yang saya miliki.

Sekarang saya ingin melakukannya menggunakan modal bootstrap. Di bawah ini adalah kode HTMl:

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

Dan untuk tombol yang membuka modal:

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

Saya mencoba menggunakan pendengar onclick tombol, tetapi pesan peringatan ditampilkan sebelum modal muncul:

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

3
shown.bs.modalPeristiwa terjadi ketika dokumen HTML berisi setidaknya <div class="modal fade"><div class="modal-dialog"></div></div>struktur.
Pemrogram Kimia


Salam komentar @ Programmer Kimia, itu akan muncul dengan jawabannya
Tarek

Jawaban:


331

Anda dapat menggunakan acara yang ditampilkan / acara acara berdasarkan apa yang Anda butuhkan:

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

Demo: Plunker

Pembaruan untuk Bootstrap 3.0

Untuk Bootstrap 3.0 Anda masih dapat menggunakan acara yang ditampilkan tetapi Anda akan menggunakannya seperti ini:

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

Lihat dokumentasi Bootstrap 3.0 di sini di bawah "Acara".


17
Gunakan $("#code").on("shown.bs.modal", function(e) {})untuk bootstrap 3.0.
Teewuane

pastikan untuk memperhitungkan apa yang dikatakan Programmer Kimia tentang perlunya struktur <div class = "modal fade"> <div class = "modal-dialog"> </div> </div> setidaknya untuk kode ini dipanggil
whyoz

1
The #codemengacu pada pemilih jQuery, salah satu bahan dasar untuk jQuery: w3schools.com/jquery/jquery_selectors.asp
DDW

Saya gunakan $(document).on("shown.bs.modal", ...untuk mendengarkan secara keseluruhan
vladkras

1
Setidaknya, ditampilkan.bs.modal benar-benar dijalankan sebelum modal ditampilkan. Ini bukan masalah dalam kasus saya, tetapi mungkin baik untuk diketahui.
Jonny

86

tidak akan berfungsi .. gunakan $(window)saja

Untuk Menampilkan

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

Untuk bersembunyi

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

5
$ ("#modal") .on ('diperlihatkan', function () {alert ("Saya ingin ini muncul setelah modal dibuka!");} Tidak berfungsi untuk saya tetapi $ (jendela) berfungsi !! Terima kasih @viper_tkd
Krutal Modi

1
Saya perlu mengikat modal APAPUN yang dibuka / ditutup, dan bukan oleh pemilih tertentu. Jawaban ini bekerja dengan baik untuk saya dalam kasus itu.
jyoseph

Ini berfungsi sebelum modal dimuat penuh pada GUI. Saya ingin mengambil data dari modal saya setelah modal dimuat - metode ini mengembalikan 'tidak terdefinisi' untuk semuanya karena modal GUI belum ada, sehingga bidang dan yang lainnya belum dapat ditanyakan. (tidak terlihat)
FrenkyB

Ini bekerja untuk saya, tetapi saya menambahkan cek di dalam handler untuk menargetkan satu modal spesifik: if( $('#code').is( e.relatedTarget ) ) { ... }karena saya memiliki beberapa di halaman.
allicarn

Terima kasih untuk nama acara yang benar, tetapi, tidak perlu mengganti ID elemen untuk $ (jendela). Menggunakan bs4 dengan jquery 3.4.
Jcc.Sanabria

17

Anda bisa menggunakan showalih-alih shownuntuk membuat fungsi memuat sebelum modal terbuka, bukan setelah modal terbuka.

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

9

Modal bootstrap memaparkan acara. Dengarkan shownacara seperti ini

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

0

jika seseorang masih memiliki masalah, satu-satunya hal yang berfungsi dengan baik untuk saya dengan menggunakan (loaded.bs.modal):

 $('#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

Anda dapat menggunakan kode belw untuk menunjukkan dan menyembunyikan model bootstrap.

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

dan jika Anda ingin menyembunyikan model maka Anda dapat menggunakan kode di bawah ini.

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

Saya harap jawaban ini bermanfaat untuk proyek Anda.


7
copycat lagi ... lihat jawaban lain pengguna
Laurent B
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.