Избегайте модального закрытия при нажатии клавиши ввода

108

Я установил модальное окно начальной загрузки с формой внутри. Я только что заметил, что когда я нажимаю клавишу Enter, модальное окно закрывается. Есть ли способ не закрыть его при нажатии Enter?

Я пробовал активировать модальное окно с помощью keyboard: false, но это предотвращает закрытие только клавишей ESC.

Люк Морган
источник
Мне нравится этот вопрос. Почему бы просто не отредактировать исходный код плагина?
Райан
Я изучу это, если найду что-нибудь полезное, отредактирую. А пока я надеюсь, что кто-то знает ответ.
Люк Морган
Я перешел с click.dismiss.modal на keyup, вроде нормально, позже проверю еще раз, не напортачил ли я что-нибудь еще
Люк Морган
Ага, это напортачило с кнопками (я добавил onclick = "$ ('# signinModal'). Modal ('hide');", чтобы избежать этих проблем, теперь, похоже, все в порядке)
Люк Морган

Ответы:

122

У меня тоже была эта проблема.
Моя проблема заключалась в том, что в моем модальном окне была кнопка закрытия.

<button class="close" data-dismiss="modal">&times;</button>

Нажатие клавиши ввода в поле ввода привело к срабатыванию этой кнопки. Вместо этого я изменил его на привязку, и теперь он работает, как ожидалось (ввод отправляет форму и не закрывает модальное окно).

<a class="close" data-dismiss="modal">&times;</a>

Не видя вашего источника, я не могу подтвердить, что ваша причина такая же.

вишня
источник
Нет, никаких кнопок не использовалось, я использовал элементы <a>, думаю, это что-то еще. Код, который я использую, в основном представляет собой образец кода на странице начальной загрузки, только с добавленной формой внутри
Люк Морган
Я не видел кнопки в правом верхнем углу, это была проблема. Теперь все работает нормально, спасибо!
Люк Морган
+1, Отличная находка! Интересно, вставил ли кто-нибудь это в трекер проблем с загрузкой? На данный момент мне лень проверять. Может, после обеда.
Эндрю
8
Это не просто проблема с кнопкой. Я удалил все кнопки из своего модального окна (включая верхний правый «x»), но если у меня есть одно текстовое поле формы, нажатие Enter закроет диалоговое окно. Как ни странно, проблема возникает только тогда, когда есть одно текстовое поле. Когда у меня их два, Enter не отклоняет модель независимо от того, какое поле имеет фокус.
jpeskin 06
11
можно использовать type = "button" на кнопке отмены
Muayyad Alsadi
78

Просто добавьте атрибут type = "button" к элементу кнопки, некоторые браузеры по умолчанию интерпретируют тип как submit .

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/button#Attributes

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

<button type="button" class="close" data-dismiss="modal">×</button>
Jcalonso
источник
19

У меня была эта проблема даже после удаления ВСЕХ кнопок из моего Bootstrap Modal, поэтому ни одно из решений здесь мне не помогло.

Я обнаружил, что форма с одним текстовым полем заставит браузер выполнить отправку формы (и приведет к отклонению), если вы нажмете Enter, когда фокус клавиатуры находится в текстовом поле. Кажется, это больше проблема браузера / формы, чем чего-либо с Bootstrap.

Мое решение заключалось в том, чтобы установить для атрибута onsubmit формы значение onsubmit = "return false"

Это может быть проблемой, если вы действительно используете событие отправки, но я использую JS-фреймворки, которые генерируют запросы AJAX, а не отправляют в браузере, поэтому я предпочитаю полностью отключить отправку. (Это также означает, что мне не нужно вручную настраивать каждый элемент формы, который может вызвать отправку).

Подробнее здесь: Модальные диалоги Bootstrap с одним полем ввода текста всегда закрываются при нажатии клавиши Enter.

jpeskin
источник
2
У меня уже были type="button"все мои кнопки закрытия / отмены, но все еще была проблема с клавишей ввода, закрывающей мой модальный. В моем модальном окне было всего одно текстовое поле ввода, и ваше решение исправило его. Спасибо за Ваш ответ!
Даррен Паркер,
7

Вы можете поместить кнопку входа в систему перед кнопкой отмены, и это также решит вашу проблему.

<div class="modal-footer">
    <button type="submit" class="btn primary">Login</button>
    <button type="submit" class="btn" data-dismiss="modal">Cancel</button>
</div>
Райан
источник
6
Отмена не должна быть типа submit
Manatax
5

У меня была такая же проблема, и я решил ее с помощью

<form onsubmit="return false;">

но есть еще одно решение: вы можете добавить фиктивный невидимый ввод, чтобы ваша форма выглядела так:

<form role="form" method="post" action="submitform.php">
    <input type="text" id="name" name="name" >
    <input type="text" style="display: none;">
</form>
Игорь Ловрич
источник
3

У меня только что был подобный опыт, и я решил, что вместо использования тега я изменил тег на тег с type = "button". Похоже, это решило проблему нажатия клавиши «Enter» и отказа от модального окна начальной загрузки.

Wmock
источник
2

У меня тоже была эта проблема, и я решил ее таким образом. Я добавил onsubmit в форму. Я также хотел иметь возможность использовать клавишу ввода в качестве клавиши сохранения, поэтому я добавил javascript save_stuff () в onsubmit. вернуть ложь; используется для предотвращения отправки формы.

<form onsubmit="save_stuff(); return false;">
 ...
</form>

<script>
    function save_stuff(){
      //Saving stuff
    }
</script>
Firze
источник