Уникайте модального відхилення при натисканні клавіші enter


108

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

Я спробував активувати модаль з клавіатури: false, але це лише запобігає звільненню за допомогою клавіші ESC.


Мені подобається це питання. Чому б просто не відредагувати вихідний код плагіна?
Райан

Я погляну на це, якщо знайду щось корисне, відредагую. Тим часом я сподіваюся, що хтось знає відповідь.
Люк Морган

Я змінився з click.dismiss.modal на клавіатуру, здається, добре, я ще раз перевіряю, чи не перекрутив я щось інше
Люк Морган

Так, що накрутили кнопки (я додав onclick = "$ ('# signinModal'). Modal ('приховати');" щоб уникнути цих проблем, зараз все нормально, здається)
Люк Морган

Відповіді:


122

У мене теж була ця проблема.
Моя проблема полягала в тому, що у мене в модалі була кнопка закриття

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

Натискання клавіші Enter у полі введення призвело до запуску цієї кнопки. Я замінив його на якір, і він працює так, як очікувалося зараз (Enter надсилає форму і не закриває модальний режим).

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

Не бачивши вашого джерела, я не можу підтвердити, що ваша причина однакова.


Ні, кнопки не використовуються, я використовував елементи <a>, я думаю, це щось інше. Код, який я використовую, в основному є зразком коду на сторінці завантаження, просто із формою, доданою всередині
Люк Морган

Я не бачив кнопки у верхньому правому куті, в цьому і була проблема. Зараз це працює чудово, дякую!
Люк Морган

+1, відмінна знахідка! Цікаво, чи хтось помістив це в трекер випуску завантажувальної програми? Наразі я лінивий перевірити. Може, після обіду.
Андрій

8
Це не лише проблема з кнопками. Я видалив усі кнопки зі свого модального модуля (включаючи верхній правий "x"), але якщо у мене є одне текстове поле форми, натисканням клавіші Enter буде відхилено діалогове вікно. Як не дивно, це проблема лише тоді, коли є одне текстове поле. Після того, як у мене є два, Enter не відхиляє модель, незалежно від того, яке поле зосереджено.
jpeskin

11
Ви можете використовувати type = "button" на кнопці "Скасувати"
Muayyad Alsadi


19

У мене була ця проблема навіть після видалення ВСІХ кнопок з мого Bootstrap Modal, тому жодне з рішень тут мені не допомогло.

Я виявив, що форма з одним текстовим полем призведе до того, що браузер може надсилати форму (і призведе до її відхилення), якщо натиснути Enter, коли фокус клавіатури знаходиться на текстовому полі. Це, здається, більше стосується браузера / форми, ніж будь-що з Bootstrap.

Моїм рішенням було встановити атрибут форми onsubmit для onsubmit = "return false"

Це може бути проблемою, якщо ви насправді використовуєте подію подання, але я використовую рамки JS, які генерують запити AJAX, а не роблять браузер надсилати, тому я вважаю за краще відключити подання повністю. (Це також означає, що мені не потрібно вручну переробляти кожен елемент форми, який може викликати подання).

Більше інформації тут: Модальні діалогові вікна завантаження з одним полем для введення тексту завжди відміняють клавішу Enter


2
У мене вже були type="button"всі кнопки закриття / скасування, але все-таки була проблема з клавішею Enter, закриваючи модаль. У моєму модалі було лише 1 вхідне текстове поле, і ваше рішення виправило його. Дякую за вашу відповідь!
Даррен Паркер

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
Скасувати не слід, будь ласка, надсилайте текст
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" та відхилення модального завантаження.


2

У мене теж була ця проблема, і я вирішив її таким чином. Я додав підписку до форми. Я також хотів використовувати ключ введення як ключ збереження, тому я додав JavaScript save_stuff () до підключення. повернути помилкове; використовується для запобігання надсилання форми.

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

<script>
    function save_stuff(){
      //Saving stuff
    }
</script>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.