如何使用纯JS或jQuery检测逃生键?

2022-08-29 22:38:23

可能的重复:
使用jQuery转义键的键码

如何在IE,Firefox和Chrome中检测逃生键?下面的代码适用于IE和警报,但在Firefox中它发出警报270

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

答案 1

注意:正在被弃用,请改用。keyCodekey

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

代码段:

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

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

keyCode正在被弃用

它似乎和工作,即使可能不是keydownkeyupkeypress


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

使用jQuery的转义键的键码


答案 2

该事件对于Escape来说效果很好,并且具有允许您在所有浏览器中使用的好处。此外,您需要将听者附加到主体而不是正文。keydownkeyCodedocument

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