Запретить ввод ключа в любом месте
Если у вас нет <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 (ввод numpad).
Обратите внимание, что, $(window)
как предлагается в некоторых других ответах, вместо / $(document)
не работает для keydown
/keyup
в IE <= 8, так что это не лучший выбор, если вы хотите охватить и этих бедных пользователей.
Разрешить ввод ключа только для текстовых областей
Если у тебя есть <textarea>
в вашей форме есть буква (которая, конечно, должна принимать клавишу Enter), добавьте обработчик нажатия клавиш к каждому отдельному элементу ввода, который не является <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, так что это не хороший селектор.