Запретить ввод ключа в любом месте
Если у вас нет <textarea>
в вашей форме, просто добавьте следующее к вашему <form>
:
<form ... onkeydown="return event.key != 'Enter';">
Или с помощью jQuery:
$(document).on("keydown", "form", function(event) {
return event.key != "Enter";
});
Это приведет к тому, что каждое нажатие клавиши внутри формы будет проверяться на key
. Если это не Enter
, он вернет true
и все будет продолжаться как обычно. Если это Enter
, то он вернет false
, и все немедленно прекратится, поэтому форма не будет отправлена.
Событие keydown
предпочтительнее, чем keyup
, поскольку keyup
слишком поздно для блокировки отправки формы. Исторически существовал и keypress
, но это устарело, как и KeyboardEvent.keyCode
. Вместо этого следует использовать KeyboardEvent.key
, что возвращает имя нажатой клавиши. Если отмечен Enter
, то будет проверяться 13 (нормальный ввод), а также 108 (ввод чисел).
Обратите внимание, что $(window)
, как предлагается в некоторых других ответах вместо $(document)
, не работает для keydown
/ keyup
в IE <= 8, так что это не лучший выбор, если вы хотите охватить и эти бедные пользователи. </p>
Разрешить ввод только для текстовых областей
Если у вас есть <textarea>
в вашей форме (который, конечно, должен принять клавишу ввода), то добавьте обработчик нажатия клавиш к каждому отдельному элементу ввода, который не является <textarea>
.
<input ... onkeydown="return event.key != 'Enter';">
<select ... onkeydown="return event.key != 'Enter';">
...
Чтобы уменьшить шаблон, это лучше сделать с помощью jQuery:
$(document).on("keydown", ":input:not(textarea)", function(event) {
return event.key != "Enter";
});
Если к этим элементам ввода прикреплены другие функции-обработчики событий, которые вы по какой-либо причине хотели бы также вызывать при нажатии клавиши ввода, тогда нужно только запретить поведение события по умолчанию, а не возвращать false, чтобы оно могло правильно распространяться на другие обработчики .
$(document).on("keydown", ":input:not(textarea)", function(event) {
if (event.key == "Enter") {
event.preventDefault();
}
});
Разрешить вводить ключ для текстовых областей и отправлять только кнопки
Если вы хотите разрешить ввод ключа также на кнопках отправки <input|button type="submit">
, то вы всегда можете уточнить селектор, как показано ниже.
$(document).on("keydown", ":input:not(textarea):not(:submit)", function(event) {
// ...
});
Обратите внимание, что input[type=text]
, как предлагается в некоторых других ответах, не охватывает эти нетекстовые вводы HTML5, так что это не хороший селектор.