Подтвердить что ты не робот

Измените параметр Bootstrap modal, если он уже существует.

Я использую Bootstrap Modal. Я объявляю это, я называю это, я показываю его... все кажется, что все в порядке.

Но что, если у меня есть уже существующий модальный, ранее показанный с свойством "keyboard", false, и я хочу изменить его на ходу? Я имею в виду что-то вроде:

Во-первых, я создаю Modal, делающий это (как вы можете видеть, я объявляю свойство modal put keyboard ложным):

$('#myModal').modal({
    show: false,
    backdrop: true,
    keyboard: false
});

Но тогда я объявляю этот обработчик событий, это означает, что если происходит "что-то", я хочу, чтобы свойство клавиатуры было установлено в true.

 $('#myModal').on('shown', function(e) {
    if (something){
        $('#myModal').modal({keyboard: true});
    }
 }

Итак, когда я иду

$("#myModal").show();

Обработчик событий не выполняет то, что он должен использовать, так как я не могу закрыть модальную форму после нажатия клавиши Escape. Но я абсолютно уверен, что "что-то" истинно, и я проверил и проверил, что выполняется $('#myModal').modal({keyboard: true}).

Какая-либо подсказка относительно того, почему это не обновляет значение параметра конфигурации?

4b9b3361

Ответ 1

Чтобы изменить настройки конфигурации на уже запущенном плагине Bootstrap, например Modal, вам нужно получить доступ к объекту плагина, прикрепленному к элементу, например $('#pluginElement').data['somePlugin'], а затем установить в нем options.

Для модального вам необходимо:

$('#myModal').data('modal').options.keyboard = true;

JSFiddle Demo (старый)


Для Bootstrap 3 (как упоминается в комментариях @Gerald) вам нужно bs.modal:

$('#myModal').data('bs.modal').options.keyboard = true;

Пример мода ожидания

Ответ 2

Немного выходит за рамки OP, но сейчас я дважды искал одно и то же решение (моя память - дерьмо), и дважды я столкнулся с этим вопросом, который привел меня к моему окончательному ответу. Моя проблема заключалась в том, как сделать уже запущенный и показанный модальный, который был "закрыт", в "непривлекательную" модель. В редких случаях, когда другой пользователь нуждается в этом ответе, вот что я сделал на основе принятого ответа:

* bootstrap3 используется

$('#modal').off('keyup.dismiss.bs.modal'); // disable escape key
$('#modal').data('bs.modal').options.backdrop = 'static';
$('#modal button.close').hide();

Обратите внимание, что я не изменил свойство options.keyboard на false (после чего вызывается escape()), как было предложено выше. Я не мог заставить это работать, поэтому, посмотрев источник Bootstrap, я увидел, что все, что он делал, это просто удаление прослушивателя событий для "keyup.dismiss.bs.modal".

Чтобы снова включить функции (в моем сценарии, когда модель скрыта):

$('#modal').on('hidden.bs.modal', function (e) {
    $(this).data('bs.modal').escape(); // reset keyboard
    $(this).data('bs.modal').options.backdrop = true;
    $('button.close', $(this)).show();
});

Это кажется ПОЛНОСТЬЮ неуклюжим и наверняка переломит ближайшие версии Bootstrap, но работает пока...

Приветствия:)

Ответ 3

Вы также можете добавить атрибут в свой HTML-тег: data-keyboard = "false"

<div id="myModal" class="modal hide fade" data-keyboard="false" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"></div>

Это работает для меня!