У меня есть две функции. Когда нажата кнопка ввода, функции работают правильно, а когда нажата кнопка выхода - нет. Какой правильный номер для клавиши escape?
$(document).keypress(function(e) {
if (e.which == 13) $('.save').click(); // enter (works as expected)
if (e.which == 27) $('.cancel').click(); // esc (does not work)
});
javascript
jquery
Shishant
источник
источник
document.addEventListener("keydown", e => console.log(e.keyCode))
в консоль браузера, щелкните в окне и нажмите нужную клавишу.Ответы:
Попробуйте с событием keyup :
источник
keydown
будет имитировать собственное поведение - по крайней мере, в Windows, где нажатие ESC или Return в диалоговом окне вызовет действие до отпускания клавиши.Вместо того, чтобы жестко кодировать значения клавиш в вашей функции, рассмотрите возможность использования именованных констант, чтобы лучше передать ваше значение:
Некоторые браузеры (например, FireFox, неуверенный в других) определяют глобальный
KeyEvent
объект, который предоставляет эти типы констант для вас. Этот ТАК вопрос показывает хороший способ определения этого объекта в других браузерах.источник
0x1B
а Enter есть0x0D
, верно?(Ответ извлечен из моего предыдущего комментария )
Вы должны использовать,
keyup
а неkeypress
. например:keypress
Похоже, что он не обрабатывается последовательно между браузерами (попробуйте демонстрацию на http://api.jquery.com/keypress в IE против Chrome против Firefox. Иногдаkeypress
не регистрируется, а также значения 'which' и ' KeyCode 'меняются), в то время какkeyup
это соответствуетТак как было некоторое обсуждение
e.which
vse.keyCode
: Обратите внимание, чтоe.which
это нормализованное значение jquery и является рекомендуемым для использования:(с http://api.jquery.com/event.which/ )
источник
keypress
при побеге, делают это правильно.keypress
предназначен для стрельбы только тогда, когда ключ производит символ, тогда какkeyup
срабатывает всегда. developer.mozilla.org/en-US/docs/Web/Events/keypressЧтобы найти код клавиши для любой клавиши, используйте эту простую функцию:
источник
27
код для управляющего ключа :)источник
Ваша лучшая ставка
Резюме
which
является более предпочтительным, чемkeyCode
потому, что он нормализованkeyup
предпочтительнее, чемkeydown
нажатие клавиши может происходить несколько раз, если пользователь удерживает ее нажатой.keypress
если вы не хотите захватить реальные символы.Интересно, что Bootstrap использует keydown и keyCode в своем выпадающем компоненте (начиная с 3.0.2)! Я думаю, что это, вероятно, плохой выбор там.
Связанный фрагмент из документа JQuery
Другие интересные вещи: JavaScript Keypress Library
источник
Попробуйте плагин jEscape ( скачать с Google Drive )
или получите код для кросс-браузера
может быть, вы можете использовать переключатель
источник
Ваш код работает просто отлично. Скорее всего, это окно не сфокусировано. Я использую подобную функцию, чтобы закрыть окна iframe и т. Д.
источник
Я пытался сделать то же самое, и это выводило меня из себя. В Firefox, кажется, что если вы пытаетесь сделать что-то, когда нажата клавиша ESC, он продолжает обрабатывать клавишу ESC, которая затем отменяет все, что вы пытались сделать. Оповещение работает отлично. Но в моем случае я хотел вернуться в историю, которая не сработала. Наконец выяснилось, что я должен был заставить распространение события остановиться, как показано ниже ...
источник
Чтобы объяснить, где нет других ответов; проблема заключается в вашем использовании
keypress
.Возможно, событие просто неправильно названо, но
keypress
определено, когда оно будет запущено . Т.е. текст. Принимая во внимание, что вы хотите / , который срабатывает всякий раз (до или после, соответственно) . Т.е. эти вещи на клавиатуре.when an actual
character
is being inserted
keydown
keyup
the user depresses a
key
Разница появляется здесь, потому что
esc
это управляющий символ (буквально «непечатный символ»), и поэтому он не пишет никакого текста, таким образом, даже не стреляяkeypress
.enter
странно, потому что даже если вы используете его в качестве управляющего символа (то есть для управления пользовательским интерфейсом), он все равно вставляет символ новой строки, который будет запускатьсяkeypress
.Источник: причудливый режим
источник
Чтобы получить шестнадцатеричный код для всех символов: http://asciitable.com/
источник
Просто опубликовать обновленный ответ, чем
e.keyCode
считается УСТАРЕЛО на MDN .Скорее вы должны выбрать
e.key
вместо этого, который поддерживает чистые имена для всего. Вот соответствующая копия пастыисточник
Esc
а не стандартEscape
.Надежная библиотека Javascript для ввода ввода с клавиатуры и введенных комбинаций клавиш. У него нет зависимостей.
http://jaywcjlove.github.io/hotkeys/
горячие клавиши понимают следующие модификаторы: ⇧, shiftoption⌥altctrlcontrolcommandи ⌘.
Следующие специальные клавиши можно использовать для быстрого доступа: backspacetab, clear, enter, return, esc, escape, space, up, down, left, right, home, end, pageup, pagedown, del, deleteи f1через f19.
источник
Я всегда использовал keyup и e.which, чтобы поймать escape-ключ.
источник
Я знаю, что этот вопрос касается jquery, но для тех, кто использует jqueryui, существуют константы для многих кодов клавиш:
http://api.jqueryui.com/jQuery.ui.keyCode/
источник