Какой код клавиши для клавиши "Esc" в jQuery
Описание проблемы:
У меня есть две функции, которые должны срабатывать при нажатии клавиш Enter и Escape. Когда я нажимаю Enter, все работает правильно, но при нажатии Escape функция не срабатывает. Я не уверен, правильно ли я указал код клавиши для Escape. Какой корректный код для клавиши Escape?
Вот код, который я использую:
$(document).keypress(function(e) {
if (e.which == 13) $('.save').click(); // Enter (работает как ожидается)
if (e.which == 27) $('.cancel').click(); // Escape (не работает)
});
Помогите, пожалуйста, разобраться в чем дело!
5 ответ(ов)
Чтобы найти код клавиши для любой клавиши, вы можете использовать следующую простую функцию:
document.onkeydown = function(evt) {
console.log(evt.keyCode);
}
При нажатии на любую клавишу в вашем документе, функция выведет код соответствующей клавиши в консоль. Просто откройте инструменты разработчика в браузере и следите за выводом в консоли, когда вы нажимаете на клавиши.
Код 27
соответствует клавише Escape. 😃
Ваш код работает вполне корректно. Скорее всего, проблема в том, что окно не имеет фокуса. Я использую аналогичную функцию для закрытия iframe и других элементов.
$(document).ready(function(){
// Устанавливаем фокус
setTimeout('window.focus()', 1000);
});
$(document).keypress(function(e) {
// Обработка нажатия клавиши Esc
if (e.keyCode == 27) {
parent.document.getElementById('iframediv').style.display = 'none';
parent.document.getElementById('iframe').src = '/views/view.empty.black.html';
}
});
В этом коде мы устанавливаем фокус на окно через секунду после загрузки документа. Убедитесь, что фокус действительно находится на окне, в противном случае обработчик нажатия клавиши может не сработать. Если проблема все еще сохраняется, проверьте настройки вашего браузера или любые другие скрипты на странице, которые могут мешать работе.
Я тоже пытался сделать то же самое, и это меня сильно раздражало. В Firefox, похоже, если вы пытаетесь выполнить некоторые действия при нажатой клавише Esc, обработка нажатия клавиши продолжается, что затем отменяет то, что вы собирались сделать. Alert работает нормально. Но в моем случае я хотел вернуться в историю, и это не сработало. Наконец, я выяснил, что нужно принудительно остановить распространение события, как показано ниже...
if (keyCode == 27)
{
history.back();
if (window.event)
{
// В IE это работает нормально, так что это не обязательно
e.cancelBubble = true;
e.returnValue = false;
}
else if (e.stopPropagation)
{
// В Firefox это предотвращает отмену history.back() при нажатии Esc
e.stopPropagation();
e.preventDefault();
}
return (false);
}
Не забудьте убедиться, что у вас правильно обработаны события, чтобы избежать нежелательного поведения.
Чтобы получить шестнадцатеричный код для всех символов, вы можете посетить сайт http://asciitable.com/. На нём представлена таблица ASCII, где указаны символы вместе с их десятичными и шестнадцатеричными значениями. Это очень удобный ресурс для поиска кодов символов.
Как перенаправить на другую веб-страницу?
Прокрутка к элементу с использованием jQuery
Как определить нажатие клавиши Esc?
Удалить ВСЕ пробелы из текста
Как получить данные формы с помощью JavaScript/jQuery?