Evitar el despido modal al pulsar la tecla enter


He configurado un modal bootstrap con un formulario dentro, acabo de notar que cuando presiono la tecla Enter, el modal se descarta. ¿Hay alguna manera de no descartarlo al presionar Enter?

He intentado activar el modal con keyboard:false, pero eso solo evita el despido con la tecla ESC.

Author: Andres Ilich, 2012-05-01

7 answers

Acabo de tener este problema también.
Mi problema era que tenía un botón de cierre en mi modal

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

Al pulsar intro en el campo de entrada se activó este botón. Lo cambié a un ancla en su lugar y funciona como se esperaba ahora (enter envía el formulario y no cierra el modal).

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

Sin ver tu fuente, no puedo confirmar que tu causa sea la misma.

 108
Author: vish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-01 22:07:54

Simplemente agregue el atributo type="button" al elemento button, algunos navegadores interpretan el tipo como submit por defecto.

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

Esto se aplica a todos los botones que tiene en el modal.

<button type="button" class="close" data-dismiss="modal">×</button>
 72
Author: jcalonso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-10 19:57:10

Tuve este problema incluso después de eliminar TODOS los botones de mi Modal de Bootstrap, por lo que ninguna de las soluciones aquí me ayudó.

Encontré que un formulario con un solo campo de texto causaría que el navegador hiciera un envío de formulario (y resultara en descartar), si presiona Enter mientras el enfoque del teclado está en el campo de texto. Esto parece ser más un problema de navegador/formulario que cualquier cosa con Bootstrap.

Mi solución fue establecer la forma onsubmit atributo onsubmit="return false"

Este mayo sería un problema si realmente está utilizando el evento submit, pero estoy usando marcos de JS que generan solicitudes AJAX en lugar de hacer un envío del navegador, por lo que prefiero deshabilitar el envío por completo. (También significa que no tengo que modificar manualmente cada elemento del formulario que podría desencadenar un envío).

Más información aquí: Los diálogos modales de Bootstrap con un solo campo de entrada de texto siempre descartan la tecla Enter

 16
Author: jpeskin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:17:53

Puede poner el botón de inicio de sesión antes del botón de cancelación y esto resolvería el problema que también está teniendo.

<div class="modal-footer">
    <button type="submit" class="btn primary">Login</button>
    <button type="submit" class="btn" data-dismiss="modal">Cancel</button>
</div>
 7
Author: Ryan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-13 15:01:46

Tuve el mismo problema, y lo resolví con

<form onsubmit="return false;">

Pero hay una solución más, puede agregar entrada invisible ficticia, por lo que su formulario se vería así:

<form role="form" method="post" action="submitform.php">
    <input type="text" id="name" name="name" >
    <input type="text" style="display: none;">
</form>
 4
Author: Igor Lovrić,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-08-21 07:53:06

Tuve una experiencia similar en este momento y la forma en que lo resolví fue que en lugar de usar una etiqueta, cambié la etiqueta a una etiqueta con type="button". Esto parecía resolver el problema de presionar la tecla "enter" y descartar el modal de bootstrap.

 3
Author: wmock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-07 05:13:02

Yo también tuve este problema y lo resolví de esta manera. He añadido onsubmit para formar. También quería poder usar enter key como clave de guardado, así que agregué save_stuff () javascript a onubmit. return false; se utiliza para evitar el envío del formulario.

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

<script>
    function save_stuff(){
      //Saving stuff
    }
</script>
 2
Author: Firze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-24 11:42:04