Як я можу програмно запустити модальний Bootstrap?


204

Якщо я поїду сюди

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

І натисніть "Запустити демонстраційний модал", це зробить очікуване. Я використовую модаль як частину мого процесу реєстрації, і там бере участь перевірка на сервері. Якщо є проблеми, я хочу перенаправити користувача на той самий модал із відображеннями моїх повідомлень про перевірку. На даний момент я не можу зрозуміти, як змусити модаль відображати, крім фізичного клацання, від користувача. Як я можу запустити модель програмно?

Відповіді:


365

Для того, щоб вручну показати модальне спливаюче вікно, ви повинні це зробити

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

Попередньо потрібно ініціалізувати його, show: falseщоб він не відображався, поки ви не зробите це вручну.

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

Де myModalідентифікатор модального контейнера.


Дякую. Це спрацювало. Однак одне зауваження полягає в тому, що коли я відкриваю модальне вікно, воно скидає прокрутку, і якщо я запустив модальне поле внизу сторінки, сторінка прокручується доверху. Як мені це зупинити?
divinedragon

@tdubs: дивно, це має працювати. Перегляньте останній модальний код github.com/twitter/bootstrap/blob/master/js/bootstrap-modal.js . Поки я бачу, це все одно повинно працювати
Клаудіо Реді

1
@ClaudioRedi, я спробував обидва в консолі, я вважаю, що лише одна працює з використанням хрому. $ ('# myModal'). Модальний ({show: false}) не працює, але працює $ ('# myModal'). Модальний ('приховати') працює. Не впевнений, чому
Тайрон Вілсон

1
Чи є спосіб передати спеціальне значення або параметр як варіант, наприклад $ ('# myModel'). Модель ({data: 1, show: false})
Anup Sharma

4
@divinedragon віки пізніше я знаю, але проблема з прокруткою до верхньої частини сторінки, ймовірно, викликана запуском спливаючого вікна з тегом, як '<a href='#'>і не вдається return falseабо preventDefaultобробляється всередині нього. Веб-переглядач виконує інструкції та прокручує до якоря за замовчуванням - у верхній частині сторінки. Я кілька разів перекусив мене, оскільки наш CSS іноді покладається на те, щоб hrefвстановити набір стилів.
бричін

54

Ви не повинні писати data-toggle = "modal" в елемент, який запустив модаль (як кнопка), і ви вручну можете показати модал за допомогою:

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

і сховатися за допомогою:

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

У мене є URL-адреса, яка відкриває модал з перемиканням даних. Тоді всередині модалу у мене є кнопка, яка викликає функцію, останнє, що вона робить, це закрити модаль, використовуючи запропонований вами метод ховання. Чудово!
JayJay

17

Якщо ви шукаєте програмне модальне створення, вам може сподобатися це:

http://nakupanda.github.io/bootstrap3-dialog/

Навіть незважаючи на те, що модаль Bootstrap надає спосіб javascript для створення модалів, вам все-таки потрібно спочатку написати HTML-позначки HTML.


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

ви можете показати модель за допомогою jquery (javascript)

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

Демо: тут

або ви можете просто видалити клас "приховати"

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

Сігналы абмеркавання


4

Я хотів зробити це angular (2/4)так, ось що я зробив:

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

Важливі речі в примітці :

  • visible є змінною (булева) в компоненті, що регулює видимість модалу.
  • showі inє класами завантаження.

Приклад компонента & html

Компонент

@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

Наступний код корисний для відкриття модалу у функції openModal () та закриття на closeModal ():

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

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

/ * #myModal - ідентифікатор модального спливаючого вікна * /


1
Поясніть, будь ласка, що робить код під час публікації відповідей.
Артеміда досі не довіряє SE
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.