Come gestire l'evento di chiusura modale in Twitter Bootstrap?


191

Nel bootstrap di Twitter, guardando la documentazione modale . Non sono riuscito a capire se c'è un modo per ascoltare l'evento vicino del modale ed eseguire una funzione.

ad esempio, prendiamo questo modale come esempio:

<div class="modal-header">
    <button type="button" class="close close_link" data-dismiss="modal" aria-hidden="true">&times;</button>
    <h3>Modal header</h3>
</div>
<div class="modal-body">
...
</div>
<div class="modal-footer">
    <a href="#" class="btn close_link" data-dismiss="modal">Close</a>   
</div>

Il pulsante X in alto e il pulsante di chiusura in basso possono entrambi nascondere / chiudere il modale a causa di data-dismiss="modal". Quindi mi chiedo, se potessi in qualche modo ascoltarlo?

In alternativa, potrei farlo manualmente in questo modo, immagino ...

$("#salesitems_modal").load(url, data, function() { 
     $(this).modal('show'); 
     $(this).find(".close_link").click(modal_closing);
});

Cosa ne pensi?


Risposte:


370

Aggiornato per Bootstrap 3 e 4

I documenti Bootstrap 3 e Bootstrap 4 fanno riferimento a due eventi che è possibile utilizzare.

hide.bs.modal : questo evento viene generato immediatamente quando è stato chiamato il metodo dell'istanza hide.
hidden.bs.modal : questo evento viene generato quando il modale ha finito di essere nascosto all'utente (attenderà il completamento delle transizioni CSS).

E fornisci un esempio su come usarli:

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

Legacy Bootstrap 2.3.2 risposta

La documentazione di Bootstrap fa riferimento a due eventi che è possibile utilizzare.

hide : questo evento viene generato immediatamente quando viene chiamato il metodo dell'istanza hide.
nascosto : questo evento viene generato quando il modale ha finito di essere nascosto all'utente (attenderà il completamento delle transizioni CSS).

E fornisce un esempio su come usarli:

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

1
Per qualche motivo, questo mi spara anche quando tengo il mouse su un pulsante che ho nel modale. E quando invio un modulo in modale (anche prima che l'evento onSubmit venga generato). Qualcuno sa come fermare questo comportamento?
Guy,

2
Per fornire un contesto aggiuntivo, consiglierei di usare $ (document) .on ('hidden', '#myModal', function () {// do qualcosa}); per evitare che ciò non funzioni in determinate situazioni, ad esempio quando è contenuto in una dichiarazione di funzione $ (document) .ready.
Gareth Daine,

ciao, voglio applicare jquery nascosto modale. e ho applicato lo stesso codice nel mio progetto ma non funziona. Hai qualche suggerimento per lo stesso?
Hardi Shah,

@HardiShah, dovresti porre una nuova domanda incluso il tuo codice e / o errori.
albertedevigo,

68

Se il tuo div modale viene aggiunto in modo dinamico, usa (Per bootstrap 3)

$(document).on('hide.bs.modal','#modal-id', function () {
                alert('');
 //Do stuff here
});

Questo funzionerà anche per contenuti non dinamici.


differenza tra hide vs hidden ??
Mahi,

3
L'evento @mahi .hide viene generato, immediatamente quando viene chiamato il metodo dell'istanza hide. mentre l'evento nascosto viene generato quando il modale ha finito di essere nascosto all'utente (attenderà il completamento delle transizioni CSS).
Confuso il

18

Esistono due coppie di eventi modali, uno è "mostra" e "mostrato", l'altro è "nascondi" e "nascosto". Come puoi vedere dal nome, nascondi i fuochi di eventi quando il modale sta per essere vicino, come fare clic sulla croce nell'angolo in alto a destra o sul pulsante di chiusura o così via. Mentre nascosto viene sparato dopo che il modale è effettivamente vicino. Puoi testare questi eventi da solo. Per esempio:

$( '#modal' )
   .on('hide', function() {
       console.log('hide');
   })
   .on('hidden', function(){
       console.log('hidden');
   })
   .on('show', function() {
       console.log('show');
   })
   .on('shown', function(){
      console.log('shown' )
   });

E, per quanto riguarda la tua domanda, penso che dovresti ascoltare l'evento 'hide' del tuo modale.


1

Eventi modali Bootstrap:

  1. hide.bs.modal => Si verifica quando il modale sta per essere nascosto.
  2. hidden.bs.modal => Si verifica quando il modale è completamente nascosto (dopo che le transizioni CSS sono state completate).
<script type="text/javascript">
    $("#salesitems_modal").on('hide.bs.modal', function () {
        //actions you want to perform after modal is closed.
    });
</script>

Spero che questo possa aiutare.

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.