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

Возможный дубликат:
Какой код клавиши для 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
    }
});

11 ответов

Решение

Замечания: 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

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

Используя 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.');
    }
});

Чистый JS

вы можете прикрепить слушателя к keyUp событие для документа.

Кроме того, если вы хотите убедиться, что никакая другая клавиша не нажимается вместе с Esc ключ, вы можете использовать значения ctrlKey, altKey, и shifkey.

 document.addEventListener('keydown', (event) => {
        
        if (event.key === 'Escape') {
         //if esc key was not pressed in combination with ctrl or alt or shift
            const isNotCombinedKey = !(event.ctrlKey || event.altKey || event.shiftKey);
            if (isNotCombinedKey) {
                console.log('Escape key was pressed with out any group keys')
              
            }
        }
    });

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

$(document).keydown(function(e){
   var code = e.keyCode || e.which;
   alert(code);
});

чистый JS (без JQuery)

      document.addEventListener('keydown', function(e) {
    if(e.keyCode == 27){
      //add your code here
    }
});

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

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

e.preventDefault();

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

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

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

Где нажата клавиша ESC, также принимается во внимание:

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

Вы можете удалить это, если условие часть, если вы хотите применить это ко всем. Или вы можете выбрать 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);

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

НАЗНАЧЕНИЕ:

$.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!');
})

В Firefox 78 используйте это ("нажатие клавиши" не работает для клавиши Escape):

function keyPress (e)(){
  if (e.key == "Escape"){
     //do something here      
  }
document.addEventListener("keyup", keyPress);

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

document.onkeyup = function(event) {
   if (event.key === 27){
     //do something here
   }
}

Простой код JavaScript для обнаружения нажатия клавиши Escape

      document.addEventListener("keydown",function(e){
  if(e.key === "Escape") {
    console.log("Escape key pressed")
  }
});
Другие вопросы по тегам