No permitir la tecla Intro en cualquier lugar
Si no tiene un <textarea>
en su formulario, simplemente agregue lo siguiente a su <form>
:
<form ... onkeydown="return event.key != 'Enter';">
O con jQuery:
$(document).on("keydown", "form", function(event) {
return event.key != "Enter";
});
Esto hará que cada pulsación de tecla dentro del formulario se verifique en el key
. Si no es así Enter
, volverá true
y todo continuará como de costumbre. Si es Enter
así, volverá false
y todo se detendrá de inmediato, por lo que no se enviará el formulario.
Se keydown
prefiere el evento keyup
ya que keyup
es demasiado tarde para bloquear el envío del formulario. Históricamente también hubo el keypress
, pero esto está en desuso, como es el KeyboardEvent.keyCode
. En su KeyboardEvent.key
lugar, debe usar lo que devuelve el nombre de la tecla que se está presionando. Cuando Enter
está marcado, entonces esto marcaría 13 (entrada normal) y 108 (entrada del teclado numérico).
Tenga en cuenta que, $(window)
como se sugiere en algunas otras respuestas, en lugar de $(document)
no funciona para keydown
/ keyup
en IE <= 8, entonces esa no es una buena opción si también desea cubrir a esos usuarios pobres.
Permitir la tecla Intro solo en áreas de texto
Si tiene un <textarea>
en su formulario (que por supuesto debería aceptar la tecla Intro), entonces agregue el controlador keydown a cada elemento de entrada individual que no sea un <textarea>
.
<input ... onkeydown="return event.key != 'Enter';">
<select ... onkeydown="return event.key != 'Enter';">
...
Para reducir el repetitivo, es mejor hacerlo con jQuery:
$(document).on("keydown", ":input:not(textarea)", function(event) {
return event.key != "Enter";
});
Si tiene otras funciones de controlador de eventos adjuntas en esos elementos de entrada, que también le gustaría invocar en la tecla Intro por alguna razón, solo evite el comportamiento predeterminado del evento en lugar de devolver falso, para que pueda propagarse correctamente a otros controladores.
$(document).on("keydown", ":input:not(textarea)", function(event) {
if (event.key == "Enter") {
event.preventDefault();
}
});
Permitir la tecla Intro en áreas de texto y enviar solo botones
Si también desea permitir la tecla Intro en los botones de envío <input|button type="submit">
, siempre puede refinar el selector de la siguiente manera.
$(document).on("keydown", ":input:not(textarea):not(:submit)", function(event) {
// ...
});
Tenga en cuenta que, input[type=text]
como se sugiere en algunas otras respuestas, no cubre esas entradas HTML5 que no son de texto, por lo que no es un buen selector.