Come posso attivare un Bootstrap modale a livello di codice?


204

Se vado qui

http://getbootstrap.com/2.3.2/javascript.html#modals

E fai clic su "Avvia demo modale" per fare ciò che ti aspetti. Sto usando il modale come parte del mio processo di registrazione e c'è una validazione lato server. Se ci sono problemi, voglio reindirizzare l'utente sullo stesso modale con i miei messaggi di convalida visualizzati. Al momento non riesco a capire come far visualizzare il modale oltre a un clic fisico da parte dell'utente. Come posso avviare il modello a livello di codice?

Risposte:


365

Per mostrare manualmente il pop-up modale devi farlo

$('#myModal').modal('show');

In precedenza è necessario inizializzarlo con in show: falsemodo che non venga visualizzato fino a quando non lo si esegue manualmente.

$('#myModal').modal({ show: false})

Dov'è myModall'id del contenitore modale.


Grazie. Ha funzionato. Un'osservazione tuttavia è che, quando si apre la finestra modale, reimposta lo scorrimento e se ho attivato la casella modale dalla parte inferiore della pagina, la pagina viene spostata verso l'alto. Come dovrei fermarlo?
divinedragon,

@tdubs: strano, dovrebbe funzionare. Vedi l'ultimo codice modale github.com/twitter/bootstrap/blob/master/js/bootstrap-modal.js . Finora vedo, dovrebbe ancora funzionare
Claudio Redi il

1
@ClaudioRedi, ho provato entrambi nella console, trovo che solo uno funzioni usando il cromo. $ ('# myModal'). modal ({show: false}) non funziona ma $ ('# myModal'). modal ('hide') funziona. Non so perché
Tyrone Wilson il

1
Esiste un modo per passare un valore o parametro personalizzato come opzione come $ ('# myModel'). Model ({data: 1, show: false})
Anup Sharma

4
Lo so @divinedragon più tardi, ma il problema con lo scorrimento nella parte superiore della pagina è probabilmente dovuto all'attivazione del popup con un tag simile '<a href='#'>e al fallimento return falseo preventDefaultall'interno del gestore. Il browser sta eseguendo le istruzioni e scorre fino all'ancoraggio predefinito: la parte superiore della pagina. Ho avuto questo morso più volte poiché il nostro CSS a volte si affida a un hrefset per lo styling adatto.
brichins,

54

Non dovresti scrivere data-toggle = "modal" nell'elemento che ha attivato il modale (come un pulsante) e puoi mostrare manualmente il modale con:

$('#myModal').modal('show');

e nasconditi con:

$('#myModal').modal('hide');

Ho un URL che apre il modale con data-toggle. Quindi all'interno del modale ho un pulsante che chiama una funzione, l'ultima cosa che fa è chiudere il modale usando il metodo hide che suggerisci. Grande!
JayJay,


13

HTML

<!-- Button trigger modal -->
<button type="button" class="btn btn-primary btn-lg">
  Launch demo modal
</button>

<!-- Modal -->
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
        <h4 class="modal-title" id="myModalLabel">Modal title</h4>
      </div>
      <div class="modal-body">
        ...
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

JS

$('button').click(function(){
$('#myModal').modal('show');
});

DEMO JSFIDDLE


9

puoi mostrare il modello via jquery (javascript)

$('#yourModalID').modal({
  show: true
})

Demo: qui

oppure puoi semplicemente rimuovere la classe "nascondi"

<div class="modal" id="yourModalID">
  # modal content
</div>


4

Volevo farlo nel angular (2/4)modo seguente, ecco cosa ho fatto:

<div [class.show]="visible" [class.in]="visible" class="modal fade" id="confirm-dialog-modal" role="dialog">
..
</div>`

Cose importanti da notare :

  • visible è una variabile (booleana) nel componente che regola la visibilità modale.
  • showe insono classi bootstrap.

Un esempio di componente e HTML

Componente

@ViewChild('rsvpModal', { static: false }) rsvpModal: ElementRef;
..
@HostListener('document:keydown.escape', ['$event'])
  onEscapeKey(event: KeyboardEvent) {
    this.hideRsvpModal();
  }
..
  hideRsvpModal(event?: Event) {
    if (!event || (event.target as Element).classList.contains('modal')) {
      this.renderer.setStyle(this.rsvpModal.nativeElement, 'display', 'none');
      this.renderer.removeClass(this.rsvpModal.nativeElement, 'show');
      this.renderer.addClass(document.body, 'modal-open');
    }
  }
  showRsvpModal() {
    this.renderer.setStyle(this.rsvpModal.nativeElement, 'display', 'block');
    this.renderer.addClass(this.rsvpModal.nativeElement, 'show');
    this.renderer.removeClass(document.body, 'modal-open');
  }

html

<!--S:RSVP-->
<div class="modal fade" #rsvpModal role="dialog" aria-labelledby="niviteRsvpModalTitle" (click)="hideRsvpModal($event)">
    <div class="modal-dialog modal-dialog-centered modal-dialog-scrollable" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title" id="niviteRsvpModalTitle">

                </h5>
                <button type="button" class="close" (click)="hideRsvpModal()" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
            </div>
            <div class="modal-body">

            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary bg-white text-dark"
                    (click)="hideRsvpModal()">Close</button>
            </div>
        </div>
    </div>
</div>
<!--E:RSVP-->

2

Il seguente codice utile per aprire modale sulla funzione openModal () e chiudere su closeModal ():

      function openModal() {
          $(document).ready(function(){
             $("#myModal").modal();
          });
      }

     function closeModal () {
          $(document).ready(function(){
             $("#myModal").modal('hide');
          });  
      }

/ * #myModal è l'id del popup modale * /


1
Spiega cosa fa il codice quando pubblica le risposte.
Artemis non si fida ancora del
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.