Как программно запустить модал 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'). modal ({show: false}) не работает, но работает $ ('# myModal'). modal ('hide'). Не уверен, почему
Тайрон Уилсон
1
Есть ли способ передать пользовательское значение или параметр как параметр, такой как $ ('# myModel'). Model ({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');
nandop
источник
У меня есть URL, который открывает модал с переключателем данных. Затем внутри модального окна у меня есть кнопка, которая вызывает функцию, и последнее, что она делает - закрывает модальное окно, используя предложенный вами метод скрытия. Большой!
JayJay
17

Если вы ищете программное модальное создание, вам может понравиться это:

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

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

nakupanda
источник
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');
});

ДЕМО JSFIDDLE

tvshajeer
источник
9

Вы можете показать модель с помощью JQuery (JavaScript)

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

Демо: здесь

или вы можете просто удалить класс «скрыть»

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

HaNdTriX
источник
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 - это идентификатор модального всплывающего окна * /

rohit parte
источник
1
Пожалуйста, объясните, что делает код при публикации ответов.
Артемида все еще не доверяет SE