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á truee tudo continuará como de costume. Se for Enter, retornará falsee tudo será interrompido imediatamente, para que o formulário não seja enviado.
O keydownevento é preferido, keyuppois 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.keyque retorna o nome da tecla que está sendo pressionada. Quando Enterestá 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/ keyupno 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.