if(characterCode == 13)
{
return false; // returning false will prevent the event from bubbling up.
}
else
{
return true;
}
Итак, представьте, что у вас есть следующее текстовое поле в форме:
<input id="scriptBox" type="text" onkeypress="return runScript(event)" />
Чтобы запустить некоторый «определенный пользователем» сценарий из этого текстового поля при нажатии клавиши ввода, и не иметь возможности отправить форму, вот пример кода. Обратите внимание, что эта функция не выполняет проверку ошибок и, скорее всего, будет работать только в IE. Чтобы сделать это правильно, вам нужно более надежное решение, но вы получите общее представление.
function runScript(e) {
//See notes about 'which' and 'key'
if (e.keyCode == 13) {
var tb = document.getElementById("scriptBox");
eval(tb.value);
return false;
}
}
Возврат значения функции предупредит обработчик события, чтобы он не генерировал событие дальше, и предотвратит дальнейшую обработку события нажатия клавиши.
НОТА:
Это было отмечено, что keyCode
в настоящее время осуждается . Следующая лучшая альтернатива which
была также устаревшим .
К сожалению, популярный стандарт key
, который широко поддерживается современными браузерами, в IE и Edge ведет себя довольно странно . Все, что старше IE11, все равно нуждается в полифилле .
Кроме того, хотя устаревшее предупреждение довольно зловеще keyCode
и which
, удаление его будет представлять собой огромное изменение в неисчислимом количестве устаревших веб-сайтов. По этой причине маловероятно, что они собираются куда-нибудь в ближайшее время.
eval
содержимое, нажав кнопку, ничем не отличается от того, если бы он открыл инструменты разработчика и сделал это. Если бы это было что-то, что было сохранено в БД и могло быть открыто ДРУГОЙ пользователем, это было бы большим делом, но это проблема, которая полностью независима от этого маленького фрагмента.keyCode
теперь устарелаИспользуйте оба
event.which
иevent.keyCode
:источник
which
другиеkeyCode
. Хорошей практикой является включение обоих.keydown
событие вместоkeyup
илиkeypress
Если вы используете jQuery:
источник
preventDefault
, похоже, не останавливает отправку формы, по крайней мере, в Chrome.$('input[type=text]').on('keydown', function(e) { if (e.which == 13) { e.preventDefault(); } });
'keydown'
правильно, как утверждают другие комментаторы. Так как это не было изменено, я обновлю ответ. Я использовал этот ответ и застрял на некоторое время, пока не вернулся и не посмотрел комментарии.event.key === "Enter"
Более свежее и намного чище: используйте
event.key
. Нет больше произвольных числовых кодов!Mozilla Docs
Поддерживаемые браузеры
источник
keyCode
устарела. Это более читабельно иОбнаружить клавишу Enter, нажатую на весь документ:
http://jsfiddle.net/umerqureshi/dcjsa08n/3/
источник
Переопределите
onsubmit
действие формы для вызова вашей функции и добавьте return false после нее, то есть:источник
Реагировать JS решение
источник
Так что, возможно, лучшим решением, которое охватит как можно больше браузеров и будет перспективным, будет
источник
Если вы хотите сделать это с помощью чисто Java-сценария, вот пример, который отлично работает
Допустим, это ваш HTML-файл
в вашем файле popup.js просто используйте эту функцию
источник
Ниже код добавит слушателя для
ENTER
ключа на всю страницу.Это может быть очень полезно на экранах с одной кнопкой «Действие», например, «Войти», «Зарегистрироваться», «Отправить» и т. Д.
Проверено на всех браузерах.
источник
Решение JQuery.
Я пришел сюда в поисках способа отложить отправку формы до тех пор, пока не сработает событие размытия при вводе текста.
Было бы неплохо получить более общую версию, которая запускает все отложенные события, а не только форму отправки.
источник
Гораздо более простой и эффективный способ с моей точки зрения должен быть:
источник
Использование TypeScript, и избежать многократных вызовов функции
источник
Немного просто
Не отправляйте форму по нажатию клавиши «Enter»:
Выполните функцию по нажатию клавиши «Ввод»:
источник
родной JS (получить API)
источник
Добавьте этот код на свою HTML-страницу ... он отключится ... Кнопка ввода ..
источник
источник
Кросс-браузерное решение
Некоторые старые браузеры реализовали события нажатия клавиш нестандартным способом.
which
и вkeyCode
настоящее время устарели, но, тем не менее, не мешает проверять эти события, так что код работает для пользователей, которые все еще используют более старые браузеры, такие как IE.В
isKeyPressed
функции проверки , если нажата клавиша была войти иevent.preventDefault()
мешает форма от представления.Минимальный рабочий пример
JS
HTML
https://jsfiddle.net/tobiobeck/z13dh5r2/
источник