Jak mogę uruchomić programowo modal Bootstrap?


204

Jeśli pójdę tutaj

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

I kliknij „Uruchom wersję demo”, robi to zgodnie z oczekiwaniami. Korzystam z modalu jako części procesu rejestracji i wymaga weryfikacji po stronie serwera. Jeśli występują problemy, chcę przekierować użytkownika do tego samego modalu z wyświetlonymi komunikatami sprawdzania poprawności. W tej chwili nie mogę dowiedzieć się, jak uzyskać modal do wyświetlania innego niż fizyczne kliknięcie użytkownika. Jak mogę uruchomić model programowo?

Odpowiedzi:


365

Aby ręcznie wyświetlić modalne okienko wyskakujące, musisz to zrobić

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

Wcześniej musisz go zainicjować, show: falseaby nie był wyświetlany, dopóki nie zrobisz tego ręcznie.

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

Gdzie myModaljest identyfikator kontenera modalnego.


Dzięki. To się udało. Jedną obserwacją jest jednak to, że kiedy I okno modalne się otworzy, resetuje przewijanie i jeśli uruchomiłem modalne okno od dołu strony, strona jest przewijana do góry. Jak mam to zatrzymać?
divinedragon,

@tdubs: dziwne, powinno działać. Zobacz najnowszy kod modalny github.com/twitter/bootstrap/blob/master/js/bootstrap-modal.js . Jak dotąd widzę, że powinien nadal działać
Claudio Redi,

1
@ClaudioRedi, próbowałem obu w konsoli, stwierdzam, że tylko jeden działa przy użyciu chromu. $ ('# myModal'). modal ({show: false}) nie działa, ale $ ('# myModal'). modal ('hide') działa. Nie jestem pewien, dlaczego
Tyrone Wilson,

1
Czy istnieje sposób na przekazanie niestandardowej wartości lub parametru jako opcji takiej jak $ ('# myModel'). Model ({data: 1, show: false})
Anup Sharma

4
@divinedragon starzeje się później, wiem, ale problem z przewijaniem do góry strony jest prawdopodobnie spowodowany wywołaniem wyskakującego okienka z tagiem podobnym '<a href='#'>do błędu w programie obsługi return falselub preventDefaultw nim. Przeglądarka działa zgodnie z instrukcją i przewija do domyślnej kotwicy - na górze strony. Ukąsiłem mnie kilka razy, ponieważ nasz CSS czasami polega na przygotowaniu hrefzestawu do dopasowania stylu.
brichins

54

Nie należy pisać data-toggle = "modal" w elemencie, który uruchomił modal (jak przycisk), a można ręcznie wyświetlić modal za pomocą:

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

i ukryj się za pomocą:

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

Mam adres URL, który otwiera modal z przełączaniem danych. Następnie wewnątrz modalu mam przycisk, który wywołuje funkcję, a ostatnią rzeczą, którą robi, jest zamknięcie modalu za pomocą sugerowanej metody ukrywania. Wspaniały!
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

możesz pokazać model za pomocą jquery (javascript)

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

Demo: tutaj

lub możesz po prostu usunąć klasę „ukryj”

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

W pobliżu


4

Chciałem to zrobić w ten angular (2/4)sposób, oto co zrobiłem:

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

Ważne rzeczy do zapamiętania :

  • visible jest zmienną (boolean) w komponencie, która reguluje widoczność modalną.
  • showi insą klasami bootstrap.

Przykładowy komponent i HTML

Składnik

@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

Poniższy kod przydatny do otwierania modalu w funkcji openModal () i zamykania w closeModal ():

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

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

/ * #myModal jest identyfikatorem modalnego wyskakującego okienka * /


1
Wyjaśnij, co robi kod, publikując odpowiedzi.
Artemis nadal nie ufa SE
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.