Запретить ввод ключа в любом месте
Если у вас нет <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, так что это не хороший селектор.