Bir Bootstrap modunu programsal olarak nasıl tetikleyebilirim?


204

Buraya gidersem

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

Ve 'Demo modal'ı başlat'ı tıklayın, beklenen şeyi yapar. Modal'ı kayıt işlemimin bir parçası olarak kullanıyorum ve sunucu tarafı doğrulaması söz konusu. Sorunlar varsa, doğrulama iletilerim görüntülenirken kullanıcıyı aynı modda yönlendirmek istiyorum. Şu anda, kullanıcıdan fiziksel bir tıklama dışında modalın nasıl görüntüleneceğini anlayamıyorum. Modeli programlı olarak nasıl başlatabilirim?

Yanıtlar:


365

Kalıcı pop-up pencereyi manuel olarak göstermek için bunu yapmanız gerekir

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

Önceden ile başlatmanız gerekir, show: falseböylece manuel olarak yapılana kadar görünmez.

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

myModalKalıcı kabın kimliği nerede .


Teşekkürler. Bu işe yaradı. Ancak gözlemlerden biri, kalıcı kutu açıldığında kaydırmayı sıfırlar ve kalıcı kutuyu sayfanın altından tetiklediğimde sayfanın yukarı kaydırılmasıdır. Bunu nasıl durdurmalıyım?
divinedragon

@tdubs: garip, işe yaramalı. En son modsal koduna bakın github.com/twitter/bootstrap/blob/master/js/bootstrap-modal.js . Şimdiye kadar görüyorum, hala çalışıyor olmalı
Claudio Redi

1
@ClaudioRedi, her ikisini de konsolda denedim, sadece birinin krom kullanarak çalıştığını görüyorum. $ ('# myModal'). modal ({show: false}) çalışmıyor ancak $ ('# myModal'). modal ('hide') çalışıyor. Emin değilim
Tyrone Wilson

1
$ ('# MyModel'). Model ({data: 1, show: false}) gibi bir özel değer veya parametreyi seçenek olarak geçirmenin herhangi bir yolu var mı?
Anup Sharma

4
@divinedragon yaşları sonra ben biliyorum ama sayfanın üst kaydırma ile sorunu nedeniyle böyle bir etiketle pop-up tetikleyen muhtemeldir '<a href='#'>ve başarısız return falseveya preventDefaultişleyicisi içinde. Tarayıcı, talimat verildiği gibi çalışıyor ve varsayılan bağlantıya (sayfanın üst kısmına) kaydırıyor. CSS bazen hrefstilin eşleşmesi için bir sete sahip olduğundan, bu beni birkaç kez ısırdı .
28'de brichins

54

Kipi (düğme gibi) tetikleyen öğeye data-toggle = " kip " yazmamalı ve kipi şu şekilde manuel olarak gösterebilirsiniz:

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

ve ile gizleyin:

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

Veri geçişi ile kalıcı bir URL açılır. Daha sonra modun içinde, son işini önerdiğiniz gizle yöntemini kullanarak modunu kapatmak olan bir işlevi çağıran bir düğme var. Harika!
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

modeli jquery (javascript) ile gösterebilirsiniz

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

Demo: burada

ya da sadece "hide" sınıfını kaldırabilirsiniz

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


4

Bunu böyle yapmak istedim angular (2/4), işte yaptığım şey:

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

Dikkat edilmesi gereken önemli noktalar :

  • visible modda, modun görünürlüğünü yöneten bir değişkendir (boole).
  • showve inbootstrap sınıflarıdır.

Örnek bir bileşen & html

Bileşen

@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

Aşağıdaki kod, openModal () işlevinde modal açmak ve closeModal () işlevinde kapatmak için yararlıdır:

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

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

/ * #myModal mod açılır pencerenin kimliği * /


1
Lütfen yanıt gönderirken kodun ne yaptığını açıklayın.
Artemis hala SE'nin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.