Não permitir a tecla enter em qualquer lugar
Se você não tiver um <textarea>
no seu formulário, adicione o seguinte ao seu <form>
:
<form ... onkeydown="return event.key != 'Enter';">
Ou com jQuery:
$(document).on("keydown", "form", function(event) {
return event.key != "Enter";
});
Isso fará com que todas as teclas pressionadas dentro do formulário sejam verificadas no key
. Caso contrário Enter
, ele retornará true
e tudo continuará como de costume. Se for Enter
, retornará false
e tudo será interrompido imediatamente, para que o formulário não seja enviado.
O keydown
evento é preferido, keyup
pois keyup
é muito tarde para bloquear o envio do formulário. Historicamente, havia também o keypress
, mas isso é preterido, assim como o KeyboardEvent.keyCode
. Você deve usar o KeyboardEvent.key
que retorna o nome da tecla que está sendo pressionada. Quando Enter
está marcado, isso verifica 13 (entrada normal) e 108 (entrada do teclado numérico).
Observe que, $(window)
conforme sugerido em algumas outras respostas, em vez de $(document)
não funcionar para keydown
/ keyup
no IE <= 8, não é uma boa opção se você também deseja cobrir esses usuários pobres.
Permitir tecla enter apenas em áreas de texto
Se você tiver um <textarea>
no seu formulário (que obviamente deve aceitar a tecla Enter), adicione o manipulador de teclas a cada elemento de entrada individual que não seja a <textarea>
.
<input ... onkeydown="return event.key != 'Enter';">
<select ... onkeydown="return event.key != 'Enter';">
...
Para reduzir o boilerplate, é melhor fazer isso com o jQuery:
$(document).on("keydown", ":input:not(textarea)", function(event) {
return event.key != "Enter";
});
Se você tiver outras funções de manipulador de eventos anexadas a esses elementos de entrada, que também gostaria de chamar na tecla enter por algum motivo, evite apenas o comportamento padrão do evento em vez de retornar false, para que possa propagar adequadamente para outros manipuladores.
$(document).on("keydown", ":input:not(textarea)", function(event) {
if (event.key == "Enter") {
event.preventDefault();
}
});
Permitir inserir tecla nas áreas de texto e enviar apenas os botões
Se você também deseja permitir a tecla Enter nos botões de envio <input|button type="submit">
, sempre pode refinar o seletor como abaixo.
$(document).on("keydown", ":input:not(textarea):not(:submit)", function(event) {
// ...
});
Observe que, input[type=text]
conforme sugerido em algumas outras respostas, não abrange as entradas que não são de texto em HTML5, portanto, esse não é um bom seletor.