Как обнаружить нажатие клавиши escape с помощью чистого JS или jQuery?

467

Возможный дубликат:
Какой код ключа для escape-ключа с jQuery

Как обнаружить клавишу Escape в IE, Firefox и Chrome? Ниже код работает в IE и предупреждения 27, но в firefox он предупреждает 0

$('body').keypress(function(e){
    alert(e.which);
    if(e.which == 27){
        // Close my modal window
    }
});
  • 1
    сделать какое-то обнаружение браузера первым?
  • 7
    Я нахожу quirksmode.org всегда надежным, чтобы узнать, в каком браузере работает: quirksmode.org/js/keys.html . Там вы можете найти, что только keyup или keydown в сочетании с keyCode работает во всех браузерах.
Показать ещё 3 комментария
Теги:
key
javascript-events

7 ответов

879
Лучший ответ

Примечание: keyCode получает устаревший key использования вместо.

function keyPress (e) {
    if(e.key === "Escape") {
        // write your logic here.
    }
}

Вот jsfiddle


keyCode становится устаревшим

Кажется, keydown и keyup работа, даже если keypress не может


$(document).keyup(function(e) {
     if (e.key === "Escape") { // escape key maps to keycode '27'
        // <DO YOUR WORK HERE>
    }
});

Какой код клавиши для escape-ключа с помощью jQuery

  • 10
    отменить привязку: $ (document) .unbind ("keyup", keyUpFunc);
  • 48
    Чтобы $(document).on('keyup.unique_name', ...) вы также можете использовать пространство имен для события, $(document).on('keyup.unique_name', ...) и $(document).unbind('keyup.unique_name')
Показать ещё 12 комментариев
168

keydown событие будет работать нормально для побега и имеет преимущество позволяет использовать keyCode во всех браузерах. Также вам нужно прикрепить слушателя к document а не к телу.

Обновление май 2016

keyCode настоящее время находится в процессе устаревания, и большинство современных браузеров теперь предлагают свойство key, хотя пока вам все еще понадобится запасной вариант для достойной поддержки браузера (на момент написания текущих выпусков Chrome и Safari его не поддерживали).).

Обновление сентябрь 2018 г. evt.key теперь поддерживается всеми современными браузерами.

document.onkeydown = function(evt) {
    evt = evt || window.event;
    var isEscape = false;
    if ("key" in evt) {
        isEscape = (evt.key === "Escape" || evt.key === "Esc");
    } else {
        isEscape = (evt.keyCode === 27);
    }
    if (isEscape) {
        alert("Escape");
    }
};
Click me
  • 3
    Обратите внимание, что вы также можете добавить слушателя к элементу <input> и поэтому он будет срабатывать только тогда, когда этот элемент имеет фокус.
  • 0
    Я пытался, но не получилось: document.getElementById('test').onkeydown = function(evt) { if ((evt || window.event).keyCode == 27) { alert() } }
Показать ещё 9 комментариев
28

Используя JavaScript, вы можете проверить работу jsfiddle

document.onkeydown = function(evt) {
    evt = evt || window.event;
    if (evt.keyCode == 27) {
        alert('Esc key pressed.');
    }
};

Используя jQuery, вы можете проверить работу jsfiddle

jQuery(document).on('keyup',function(evt) {
    if (evt.keyCode == 27) {
       alert('Esc key pressed.');
    }
});
  • 0
    скрипка не работает
  • 0
    @yeahdixon не знаю, о чем ты говоришь. Оно работает. Вы забыли нажать ESC? лол
15

проверить keyCode && & which и keyup || keydown

$(document).keydown(function(e){
   var code = e.keyCode || e.which;
   alert(code);
});
  • 0
    я вижу, что это не работает, jsfiddle.net/GWJVt только для побега ... кажется неловким?
  • 0
    $ (document.body) .keypress () не запускается
Показать ещё 2 комментария
6

Ниже приведен код, который не только отключает клавишу ESC, но также проверяет условие, в котором он нажат, и в зависимости от ситуации он выполнит действие или нет.

В этом примере

e.preventDefault();

отключит действие нажатия клавиши ESC.

Вы можете сделать что угодно, чтобы скрыть div следующим образом:

document.getElementById('myDivId').style.display = 'none';

При нажатии клавиши ESC также учитывается:

(e.target.nodeName=='BODY')

Вы можете удалить эту часть условия if, если хотите применить ее ко всем. Или вы можете нацелить INPUT здесь только для применения этого действия, когда курсор находится в поле ввода.

window.addEventListener('keydown', function(e){
    if((e.key=='Escape'||e.key=='Esc'||e.keyCode==27) && (e.target.nodeName=='BODY')){
        e.preventDefault();
        return false;
    }
}, true);
6

Лучший способ - сделать функцию для этого

ФУНКЦИЯ:

$.fn.escape = function (callback) {
    return this.each(function () {
        $(document).on("keydown", this, function (e) {
            var keycode = ((typeof e.keyCode !='undefined' && e.keyCode) ? e.keyCode : e.which);
            if (keycode === 27) {
                callback.call(this, e);
            };
        });
    });
};

Пример:

$("#my-div").escape(function () {
    alert('Escape!');
})
  • 3
    На самом деле, кажется, что keypress не срабатывает при нажатии клавиши escape. По крайней мере, не в Chrome на Mac.
  • 1
    Спасибо за этот отзыв, я сделал обновление и изменил правило. keydown исправить проблему.
Показать ещё 1 комментарий
2

Я думаю, что самый простой способ - ванильный javascript:

document.onkeyup = function(event) {
   if (event.key === 27){
     //do something here
   }
}
  • 5
    На моем Chrome (версия 55.0.2883.95 (64-разрядная версия)) я получаю Escape как event.key а не 27

Ещё вопросы

Сообщество Overcoder
Наверх
Меню