Заборонити введення ключа в будь-якому місці
Якщо у вас немає <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, тож це не гарний вибір, якщо ви хочете охопити і тих поганих користувачів.
Дозволити вводити ключ лише для текстових областей
Якщо у вас є <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";
});
Якщо на цих елементах введення приєднані інші функції обробника подій, які ви також хочете з певних причин викликати на клавіші Enter, тоді лише запобігайте поведінці за замовчуванням події, а не повертати помилкову, щоб вона могла належним чином поширюватися на інші обробники.
$(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, тож це не гарний вибір.