Chiamata di una funzione su bootstrap modale aperta


179

Usavo la finestra di dialogo dell'interfaccia utente di JQuery e aveva l' openopzione, in cui è possibile specificare del codice Javascript da eseguire una volta aperta la finestra di dialogo. Avrei usato quell'opzione per selezionare il testo all'interno della finestra di dialogo usando una funzione che ho.

Ora voglio farlo usando il modale di bootstrap. Di seguito è riportato il codice 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'

E per quanto riguarda il pulsante che apre il modale:

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

Ho provato a utilizzare un listener onclick del pulsante, ma il messaggio di avviso è stato visualizzato prima che apparisse il modale:

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

3
shown.bs.modalL'evento si verifica quando il documento HTML contiene almeno una <div class="modal fade"><div class="modal-dialog"></div></div>struttura.
Programmatore chimico,


Saluta commento programmatore chimico, dovrebbe apparire con la risposta
Tarek

Risposte:


332

Puoi utilizzare l' evento mostrato / mostrare l'evento in base a ciò di cui hai bisogno:

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

Demo: Plunker

Aggiornamento per Bootstrap 3.0

Per Bootstrap 3.0 puoi comunque utilizzare l'evento mostrato ma lo utilizzeresti in questo modo:

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

Vedi i documenti Bootstrap 3.0 qui sotto "Eventi".


17
Utilizzare $("#code").on("shown.bs.modal", function(e) {})per bootstrap 3.0.
teewuane,

assicurati di tenere conto di ciò che ha detto il programmatore chimico sulla necessità della struttura <div class = "modal fade"> <div class = "modal-dialog"> </div> </div> almeno per chiamare questo codice
whyoz,

1
Si #coderiferisce al selettore jQuery, uno degli ingredienti di base per jQuery: w3schools.com/jquery/jquery_selectors.asp
DdW

Uso $(document).on("shown.bs.modal", ...per l'ascolto generale
vladkras il

1
Almeno il mostrato.bs.modal viene effettivamente eseguito prima della visualizzazione del modale. Questo non è un problema nel mio caso, ma può essere buono a sapersi.
Jonny

86

non funzionerà .. usare $(window)invece

Per mostrare

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

Per nascondersi

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

5
$ ("#modal") .on ('mostrato', function () {alert ("Voglio che appaia dopo che il modale si è aperto!");} Non funzionava per me ma $ (finestra) ha funzionato !! Grazie @viper_tkd
Krutal Modi

1
Avevo bisogno di legare a QUALSIASI modale aperto / chiuso, e non da un selettore specifico. Questa risposta ha funzionato bene per me in quel caso.
joseose

Funziona prima che il modale sia completamente caricato sulla GUI. Voglio prendere i dati dal mio modale dopo che il modale è stato caricato - questo metodo restituisce "non definito" per tutto perché la GUI modale non è ancora esistente, quindi i campi e tutto il resto non sono ancora interrogabili. (non visibile)
FrenkyB,

Questo ha funzionato per me, ma ho aggiunto un controllo all'interno del gestore per scegliere come target un modale specifico: if( $('#code').is( e.relatedTarget ) ) { ... }dato che ne avevo multipli sulla pagina.
Allicarn,

Grazie per il nome dell'evento corretto, ma non è necessario sostituire l'ID elemento per $ (finestra). Usare bs4 con jquery 3.4.
Jcc.Sanabria,

17

puoi usare showinvece di shownfare caricare la funzione appena prima dell'apertura modale, anziché dopo l'apertura modale.

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

9

Bootstrap modale espone eventi. Ascolta l' shownevento in questo modo

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

0

se qualcuno ha ancora un problema, l'unica cosa che funziona perfettamente per me usando (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

È possibile utilizzare il codice belw per mostrare e nascondere il modello bootstrap.

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

e se vuoi nascondere il modello, puoi usare il codice qui sotto.

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

Spero che questa risposta sia utile per il tuo progetto.


7
copia di nuovo ... vedi le altre risposte dell'utente
Laurent B,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.