开发者问题收集

如何检测按下 Esc 键?

2010-07-30
747102

如何在 IE、Firefox 和 Chrome 中检测 Esc 键按下情况? 以下代码在 IE 中有效并提示 27 ,但在 Firefox 中则提示 0

$('body').keypress(function(e){
    alert(e.which);
    if(e.which == 27){
        // Close my modal window
    }
});
3个回答

注意: keyCode 弃用 ,请改用 key

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

代码片段:

var msg = document.getElementById('state-msg');

document.body.addEventListener('keydown', function(e) {
  if (e.key == "Escape") {
    msg.textContent += 'Escape pressed:'
  }
});
Press ESC key <span id="state-msg"></span>

keyCode keypress 已弃用。

It seems keydown and keyup work.


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

使用 jQuery 的退出键的键码

Jigar Joshi
2010-07-30

keydown 事件对于 Escape 来说非常适用,并且允许您在所有浏览器中使用 keyCode 。此外,您需要将侦听器附加到 document 而不是正文。

2016 年 5 月更新

keyCode 现已弃用,大多数现代浏览器现在都提供 key 属性,尽管您现在仍需要后备以获得不错的浏览器支持(在撰写本文时,Chrome 和 Safari 的当前版本不支持它)。

2018 年 9 月更新 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 then press the Escape key
Tim Down
2010-07-30

使用 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.');
    }
});
Subodh Ghulaxe
2014-07-11