Bagaimana saya bisa memicu modal Bootstrap secara terprogram?


204

Jika saya pergi ke sini

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

Dan klik 'Luncurkan modal demo' itu melakukan hal yang diharapkan. Saya menggunakan modal sebagai bagian dari proses pendaftaran saya dan ada validasi sisi server yang terlibat. Jika ada masalah, saya ingin mengarahkan pengguna ke modal yang sama dengan pesan validasi saya ditampilkan. Saat ini saya tidak tahu cara mendapatkan modal untuk ditampilkan selain klik fisik dari pengguna. Bagaimana saya bisa meluncurkan model secara terprogram?

Jawaban:


365

Untuk menampilkan secara manual modal pop up, Anda harus melakukan ini

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

Anda sebelumnya perlu menginisialisasi dengan show: falsesehingga tidak akan muncul sampai Anda melakukannya secara manual.

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

Di mana myModalid dari wadah modal.


Terima kasih. Itu berhasil. Namun satu pengamatan adalah bahwa, ketika saya kotak modal terbuka, itu mengatur ulang gulir dan jika saya memicu kotak modal dari bagian bawah halaman, halaman akan digulir ke atas. Bagaimana saya harus menghentikannya?
divinedragon

@tdubs: aneh, harusnya berhasil. Lihat kode modal terbaru github.com/twitter/bootstrap/blob/master/js/bootstrap-modal.js . Sejauh ini saya melihat, itu masih bekerja
Claudio Redi

1
@ClaudioRedi, saya mencoba keduanya di konsol, saya menemukan bahwa hanya satu yang bekerja menggunakan kromium. $ ('# myModal'). modal ({show: false}) tidak berfungsi tetapi $ ('# myModal'). modal ('hide') berfungsi. Tidak yakin mengapa
Tyrone Wilson

1
Apakah ada cara untuk memberikan nilai atau parameter khusus sebagai opsi seperti model $ ('# myModel'). ({Data: 1, tampilkan: false})
Anup Sharma

4
@divinedragon berabad-abad kemudian saya tahu, tetapi masalah dengan menggulir ke bagian atas halaman kemungkinan karena memicu popup dengan tag seperti '<a href='#'>dan gagal ke return falseatau preventDefaultdi dalam pawang. Browser melakukan seperti yang diperintahkan dan gulir ke jangkar default - bagian atas halaman. Saya sudah pernah menggigit saya beberapa kali karena CSS kami terkadang mengandalkan hrefset yang cocok dengan style.
brichins

54

Anda tidak boleh menulis data-toggle = "modal" di elemen yang memicu modal (seperti tombol), dan Anda secara manual dapat menunjukkan modal dengan:

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

dan sembunyikan dengan:

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

Saya memiliki URL yang membuka modal dengan toggle data. Kemudian di dalam modal saya memiliki tombol yang memanggil fungsi yang hal terakhir yang dilakukannya adalah menutup modal menggunakan metode sembunyikan yang Anda sarankan. Bagus!
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

Anda dapat menampilkan model melalui jquery (javascript)

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

Demo: di sini

atau Anda bisa menghapus kelas "sembunyikan"

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


4

Saya ingin melakukan ini dengan angular (2/4)cara, inilah yang saya lakukan:

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

Hal-hal penting yang perlu diperhatikan :

  • visible adalah variabel (boolean) dalam komponen yang mengatur visibilitas modal.
  • showdan inkelas bootstrap.

Contoh komponen & html

Komponen

@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

Kode berikut berguna untuk membuka modal pada fungsi openModal () dan menutup pada closeModal ():

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

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

/ * #myModal adalah id dari modal popup * /


1
Tolong jelaskan apa yang dilakukan kode ketika mengirim jawaban.
Artemis masih tidak percaya
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.