Измените параметр 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})
.
Какая-либо подсказка относительно того, почему это не обновляет значение параметра конфигурации?
Ответы
Ответ 1
Чтобы изменить настройки конфигурации на уже запущенном плагине Bootstrap, например Modal, вам нужно получить доступ к объекту плагина, прикрепленному к элементу, например $('#pluginElement').data['somePlugin']
, а затем установить в нем options
.
Для модального вам необходимо:
$('#myModal').data('modal').options.keyboard = true;
Для 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>
Это работает для меня!