¿Cómo evita que una ENTERpulsación de tecla envíe un formulario en una aplicación basada en la web?
javascript
events
usuario67722
fuente
fuente
Aquí hay un controlador jQuery que se puede usar para detener el ingreso de envíos y también detener la tecla de retroceso -> atrás. Los pares (keyCode: selectorString) en el objeto "keyStop" se utilizan para hacer coincidir los nodos que no deberían activar su acción predeterminada.
Recuerde que la web debe ser un lugar accesible, y esto está rompiendo las expectativas de los usuarios de teclados. Dicho esto, en mi caso, a la aplicación web en la que estoy trabajando no le gusta el botón Atrás de todos modos, por lo que deshabilitar su atajo de teclado está bien. La discusión "debería entrar -> enviar" es importante, pero no está relacionada con la pregunta real formulada.
¡Aquí está el código, para que pienses en la accesibilidad y por qué realmente querrías hacer esto!
fuente
Simplemente devuelva falso desde el controlador de envío
o si quieres un controlador en el medio
fuente
submit
<form>
de conseguir presentado en absoluto es tirar al bebé con el agua del baño.fuente
e.preventDefault()
en lugar dereturn false
lograr el mismo fin, pero permitir que el evento llegue a controladores en elementos primarios. La acción predeterminada (envío de formulario) aún seDeberá llamar a esta función que cancelará el comportamiento de envío predeterminado del formulario. Puede adjuntarlo a cualquier campo o evento de entrada.
fuente
La tecla ENTRAR simplemente activa el botón de envío predeterminado del formulario, que será el primero
el navegador encuentra dentro del formulario.
Por lo tanto, no tengo un botón de enviar, sino algo como
EDITAR : En respuesta a la discusión en los comentarios:
Esto no funciona si solo tiene un campo de texto, pero puede ser ese el comportamiento deseado en ese caso.
El otro problema es que esto se basa en Javascript para enviar el formulario. Esto puede ser un problema desde el punto de vista de accesibilidad. Esto se puede resolver escribiendo
<input type='button'/>
javascript y luego poner un<input type='submit' />
dentro de una<noscript>
etiqueta. El inconveniente de este enfoque es que para los navegadores con JavaScript deshabilitado, tendrá envíos de formularios en ENTER. Depende del OP decidir cuál es el comportamiento deseado en este caso.No conozco ninguna forma de hacerlo sin invocar javascript en absoluto.
fuente
En resumen, la respuesta en Javascript puro es:
Esto solo deshabilita la acción de presionar la tecla "Enter" para input type = 'text'. Los visitantes aún pueden usar la tecla "Enter" en todo el sitio web.
Vea mi respuesta detallada para una pregunta similar aquí
fuente
e.target.nodeName === 'INPUT' && e.target.type !== 'textarea'
. Con el código especificado, permitirá enviar formularios si se enfoca una radio o casilla de verificación.Todas las respuestas que encontré sobre este tema, aquí o en otras publicaciones tienen un inconveniente y es que también evita el desencadenante de cambio real en el elemento del formulario. Entonces, si ejecuta estas soluciones, el evento onchange no se activa también. Para superar este problema, modifiqué estos códigos y desarrollé el siguiente código para mí. Espero que esto sea útil para otros. Di una clase a mi formulario "prevent_auto_submit" y agregué el siguiente JavaScript:
fuente
Siempre lo he hecho con un controlador de pulsación de teclas como el anterior en el pasado, pero hoy encontré una solución más simple. La tecla Intro solo activa el primer botón de envío no deshabilitado en el formulario, por lo que en realidad todo lo que se requiere es interceptar ese botón tratando de enviar:
Eso es. Las pulsaciones de teclas se manejarán como de costumbre por el navegador / campos / etc. Si se activa la lógica de ingresar-enviar, entonces el navegador encontrará ese botón de envío oculto y lo activará. Y el controlador de JavaScript evitará la sumisión.
fuente
hidden
en la entrada sería más corto. buen truco :)He pasado algún tiempo haciendo este navegador cruzado para IE8,9,10, Opera 9+, Firefox 23, Safari (PC) y Safari (MAC)
Ejemplo de JSFiddle: http://jsfiddle.net/greatbigmassive/ZyeHe/
Código base: llame a esta función a través de "onkeypress" adjunta a su formulario y pase "window.event".
fuente
Luego en su formulario:
Sin embargo, sería mejor si no usaras JavaScript molesto.
fuente
charCode
. También moví elreturn false
interior del bloque if. Buena atrapada.En mi caso, este JavaScript jQuery resolvió el problema
fuente
<input>
campos del formulario?Evitar que "ENTRAR" envíe el formulario puede incomodar a algunos de sus usuarios. Por lo tanto, sería mejor si sigue el siguiente procedimiento:
Escriba el evento 'onSubmit' en su etiqueta de formulario:
escriba la función Javascript de la siguiente manera:
Cualquiera sea el motivo, si desea evitar el envío del formulario al presionar la tecla Intro, puede escribir la siguiente función en javascript:
Gracias.
fuente
Agregue esta etiqueta a su formulario:
onsubmit="return false;"
entonces solo puede enviar su formulario con alguna función de JavaScript.fuente
Para evitar el envío de formularios al presionar enterun campo
textarea
oinput
, verifique el evento de envío para encontrar qué tipo de elemento envió el evento.Ejemplo 1
HTML
jQuery
Una mejor solución es si no tiene un botón de envío y activa el evento con un botón normal. Es mejor porque en el primer ejemplo se disparan 2 eventos de envío, pero en el segundo ejemplo solo se dispara 1 evento de envío.
Ejemplo 2
HTML
jQuery
fuente
Encontrará esto más simple y útil: D
fuente
Qué tal si:
fuente
Consulte este artículo ¿Cómo evitar que se presione ENTER para enviar un formulario web?
fuente
Puede atrapar el keydown en un formulario en javascript y evitar incluso el burbujeo, creo. ENTER en una página web básicamente solo envía el formulario en el que se coloca el control seleccionado actualmente.
fuente
Este enlace proporciona una solución que me ha funcionado en Chrome, FF e IE9 más el emulador para IE7 y 8 que viene con la herramienta de desarrollo de IE9 (F12).
http://webcheatsheet.com/javascript/disable_enter_key.php
fuente
<script type="text/javascript"> function stopRKey(evt) { var evt = (evt) ? evt : ((event) ? event : null); var node = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null); if ((evt.keyCode == 13) && (node.type=="text")) {return false;} } document.onkeypress = stopRKey; </script>
Otro enfoque es agregar el botón de entrada de envío al formulario solo cuando se supone que debe enviarse y reemplazarlo por un simple div durante el llenado del formulario
fuente
Simplemente agregue este atributo a su etiqueta FORM:
Luego, en su etiqueta SCRIPT, agregue esto:
Luego, cuando haces un botón o por cualquier otra razón (como en una función) finalmente permites un envío, simplemente voltea el booleano global y haz una llamada .submit (), similar a este ejemplo:
fuente
Me he encontrado con esto porque tengo varios botones de envío con diferentes valores de 'nombre', de modo que cuando se envían hacen cosas diferentes en el mismo archivo php. El botón
enter
/return
rompe esto ya que esos valores no se envían. Entonces estaba pensando, ¿el botónenter
/return
activa el primer botón de envío en el formulario? De esa manera, podría tener un botón de envío 'vainilla' que está oculto o tiene un valor de 'nombre' que devuelve el archivo php en ejecución a la página con el formulario en él. O bien, un valor de 'nombre' predeterminado (oculto) que activa la pulsación de tecla, y los botones de envío se sobrescriben con sus propios valores de 'nombre'. Solo un pensamiento.fuente
Qué tal si:
Y simplemente asigne un nombre correcto a su botón y aún se enviará, pero los campos de texto, es decir, el objetivo original explícito cuando presiona regresar en uno, no tendrán el nombre correcto.
fuente
Esto funcionó para mí.
onkeydown = "return! (event.keyCode == 13)"
fuente
Así es como lo haría:
fuente
poner en un archivo externo javascript
o en algún lugar dentro de la etiqueta del cuerpo
fuente
Tuve el mismo problema (formularios con toneladas de campos de texto y usuarios no calificados).
Lo resolví de esta manera:
usando esto en el código HTML:
De esta manera, la
ENTER
clave funciona según lo planeado, pero una confirmación (un segundoENTER
se requiere toque, generalmente).Dejo a los lectores la búsqueda de un script que envíe al usuario en el campo donde presionó
ENTER
si decide permanecer en el formulario.fuente