Предотвратить исчезновение Bootstrap Modal при щелчке снаружи или нажатии escape?

348

Я использую Twitter Bootstrap modal как окно мастера и хочу, чтобы пользователь не закрывал его при нажатии вне модальности или при нажатии escape. Вместо этого я хочу, чтобы он был закрыт, когда пользователь нажимает кнопку завершения. Как я могу достичь этого сценария?

  • 4
    THX, я не мог найти это!?
  • 0
    Уже предоставленное решение, см. Ссылку ниже: stackoverflow.com/questions/9894339/…
Теги:
modal-dialog

15 ответов

681
Лучший ответ

Если вы используете JavaScript, то:

$('#myModal').modal({
    backdrop: 'static',
    keyboard: false
})

и если HTML:

<a data-controls-modal="your_div_id" data-backdrop="static" data-keyboard="false" href="#">
  • 14
    При использовании JavaScript вы должны будете установить клавиатуру в false, чтобы предотвратить закрытие, нажав ESC тоже.
  • 0
    обратите внимание, что табулирование все еще включено в фоновом режиме
Показать ещё 5 комментариев
198

Также работает data-backdrop="static", чтобы щелкнуть и data-keyboard="false" в Esc в вашем div-модале:

<div id="idModal" class="modal hide" data-backdrop="static" data-keyboard="false">
  • 4
    Другие предложения верны, если вам нужно установить это программное / рабочее время, но это верный способ сделать это во время разработки, и я думаю, что это лучший способ для разработчиков с разделением интересов.
  • 2
    У меня было две модальности на одной странице. По крайней мере, один из них никогда не работал правильно. Но это решение решает это. Также имеет смысл поместить его в сам модальный div.
Показать ещё 1 комментарий
44

Вы также можете использовать Direct в модели начальной загрузки.

<div class="modal fade" id="myModal" data-keyboard="false" data-backdrop="static">
36

Просто добавьте атрибуты data-backdrop="static" и data-keyboard="false" к этому модалу.

Eg.

<a data-controls-modal="your_div_id" data-backdrop="static" data-keyboard="false" href="#">
22

Вы можете использовать код ниже

$.fn.modal.prototype.constructor.Constructor.DEFAULTS.backdrop = 'static';

чтобы изменить поведение по умолчанию.

  • 0
    Я думаю, что это лучшее решение, если кому-то нужно изменить его глобально!
16

Я использую эти атрибуты, и он работает, data-keyboard="false" data-backdrop="static"

13
jQuery('#modal_ajax').modal('show', {backdrop: 'static', keyboard: false});
  • 3
    Хотя этот код может помочь решить проблему, он не объясняет, почему и / или как он отвечает на вопрос. Предоставление этого дополнительного контекста значительно улучшило бы его долгосрочную образовательную ценность. Пожалуйста, измените свой ответ, чтобы добавить объяснение, в том числе, какие ограничения и предположения применяются.
  • 13
    Ваш ответ не работает. Вы должны установить параметры, прежде чем показывать модальные. $('#modal').modal({backdrop: 'static', keyboard: false}, 'show');
9
<button class="btn btn-primary btn-lg" data-backdrop="static" data-keyboard="false" data-target="#myModal" data-toggle="modal">
5

Если вам нужно отключить нажатие на внешнюю сторону, но разрешить нажатие кнопки

$('#myModal').modal({
    backdrop: 'static',   // This disable for click outside event
    keyboard: true        // This for keyboard event
})
4

Для меня работала следующая script:

// prevent event when the modal is about to hide
$('#myModal').on('hide.bs.modal', function (e) {
    e.preventDefault();
    e.stopPropagation();
    return false;
});
  • 0
    И как ты это закрыл. Если вы хотите закрыть после этого?
  • 0
    На самом деле, модальный режим открывается в окне браузера или в диалоговом окне, например в диалоговом окне jQuery UI. Так что, если мы позволим модальному закрыться, окно или диалог будут пустыми. Я знаю, что это неправильный дизайн, но он действительно полезен, когда необходимо открыть / показать функцию, разработанную как модальный для сайта B внутри сайта A!
3

Этот код предотвращает модальное закрытие, если щелкнуть за пределами модального.

   $(document).ready(function () {
    $('#myModal').modal({
           backdrop: 'static',
           keyboard: false
    })
   })
1

Ваш код работает, когда я выхожу на сторону модального, но если я использую html input поле внутри модального тела, тогда наведите курсор на этот ввод, затем нажмите esc ключ модальный закрыт. Нажмите здесь

0
<button class='btn btn-danger fa fa-trash' data-toggle='modal' data-target='#deleteModal' data-backdrop='static' data-keyboard='false'></button>

просто добавьте атрибут data-background и data-keyboard к кнопке, на которой модель открыта.

  • 1
    Добавьте описание к вашему комментарию
0

Если вам нужно настроить это после показа модального окна, вы можете использовать решение @Nabid. Однако иногда вам все же нужно разрешить какой-либо метод закрыть модальный режим. Предполагая, что у вас есть кнопка с классом really-close-the-modal, которая должна действительно закрыть модальное окно, вы можете использовать этот код (jquery):

var closeButtonClicked = false;

$('.really-close-the-modal').on('click', function () {
    closeButtonClicked = true;
});

$('#myModal').on('hide.bs.modal', function (e) {
    if (!closeButtonClicked) {
        e.preventDefault();
        e.stopPropagation();
        return false;
    }
    closeButtonClicked = false;
});

Это не очень хороший дизайн кода, но он помог мне в ситуации, когда модал показывался с анимацией загрузчика, пока не вернулся запрос ajax, и только тогда я смог узнать, нужно ли сконфигурировать модал для предотвращения "неявного" закрытие. Вы можете использовать аналогичную конструкцию, чтобы предотвратить закрытие модального окна во время его загрузки.

0
<div class="modal show">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">     

    <h4 class="modal-title">Modal title</h4>
     </div>
     <div class="modal-body">
      <p>One fine body&hellip;</p>
  </div>

  </div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->

Я думаю, что этот codepen может вам помочь предотвратить использование модального закрытия css и bootstrap

Ещё вопросы

Сообщество Overcoder
Наверх
Меню