Как включить функцию закрытия escape-клавиши в модальном окне Twitter Bootstrap?


132

Я выполнил инструкции для модального окна Twitter Bootstrap на их главной странице документации
и использовал data-keyboard="true"упомянутый синтаксис, но клавиша escape не закрывает модальное окно.
Что-то еще мне не хватает?

Код:

<a href="#my-modal" data-keyboard="true" data-toggle="modal">Open Modal</a>

<div class='modal fade hide' id='my-modal'>
  <div class='modal-body'>
    <div>Test</div>
  </div>
</div>

2
Это включено по умолчанию
Adam F

Ответы:


301

Похоже, это проблема с тем, как привязано событие keyup.

Вы можете добавить tabindexатрибут к вашему модальному окну, чтобы обойти эту проблему:

tabindex="-1"

Итак, ваш полный код должен выглядеть так:

<a href="#my-modal" data-keyboard="true" data-toggle="modal">Open Modal</a>

<div class='modal fade hide' id='my-modal' tabindex='-1'>
    <div class='modal-body'>
    <div>Test</div>
    </div>
</div>

Для получения дополнительной информации вы можете просмотреть обсуждение этого вопроса на github.

(Обновлена ​​ссылка на новый репозиторий TWBS)


3
Однако это предотвращает автофокусировку полей ввода.
топлес

3
Вы также можете добавить атрибут data-keyboard в свой div.modal (и опустить его в вызывающих объектах), если вы вызываете диалог из нескольких мест.
Виталик Верховодов

2
Как указывает @nrek ниже, закрытие с escape истинно по умолчанию, поэтому вам это не обязательно data-keyboard="true"- это tabindex="-1"активирует поведение
Лео

Я могу подтвердить, что это решение работает в Bootstrap 4. Я не знаю, почему оно не работает по умолчанию, как говорится в документации.
Binar Web

Более того, data-keyboardпринадлежит модальному элементу, а не контроллеру. Это можно проверить, установив для него значение false.
WoodrowShigeru,

23

также, если вы вызываете через javascript, используйте это:

$('#myModal').modal({keyboard: true}) 

15
раньше это было единственное, что вам нужно было сделать, но теперь вам также нужно убедиться, что ваш div имеет атрибут 'tabindex = "- 1"'.
Бала Кларк

1
Мне нужно было только установить индекс вкладки.
weltschmerz

@dchacke это потому, что для свойства клавиатуры по умолчанию установлено значение true! так что просто установите tabindex = '- 1'
nrek

12

добавить tabindex="-1"атрибут в модальный div

<div id="myModal" class="modal fade" role="dialog" tabindex="-1">

</div>

3

В angular я использую вот так:

var modalInstance = $modal.open({                        
 keyboard: false,
 backdrop: 'static',
 templateUrl: 'app/dashboard/view/currentlyIneligibleView.html',
 controller: 'currentlyIneligibleCtrl',
 resolve: {
     data: function () { return param; }
    }
});
  • фон: 'static' => Остановить, чтобы закрыть при нажатии снаружи
  • keyboard: false => Остановить, чтобы закрыть с помощью кнопки выхода

-1

Bootstrap 3

В HTML просто установите data-backdropзначение static и data-keyboardfalse

Пример :

<button type="button" data-toggle="modal" data-target="#myModal" data-backdrop="static" data-keyboard="false">Launch modal</button>

или

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

Живой тест:

https://jsfiddle.net/sztx8qtz/

Узнать больше: http://budiirawan.com/prevent-bootstrap-modal-closing/


Ваш пример не дает ключ побег
Бинар Web
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.