如何使用纯 JS 或 jQuery 检测转义键按下?

IT技术 javascript jquery keyevent jquery-events
2021-01-31 21:03:01

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

如何在 IE、Firefox 和 Chrome 中检测转义键按下?下面的代码适用于 IE 和警报27,但在 Firefox 中它会发出警报0

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

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

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

代码片段:


keyCode 正在被弃用

它似乎keydownkeyup工作,即使keypress可能不


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

使用 jQuery 转义键的键码

@LachlanMcD - 请注意(5 年后!)它.unbind现在已从jQuery 3.0 开始弃用......你应该使用.off
2021-03-17 21:03:01
解除绑定: $(document).unbind("keyup", keyUpFunc);
2021-04-03 21:03:01
您应该始终使用===.
2021-04-04 21:03:01
要解除绑定,您还可以在事件上使用命名空间,$(document).on('keyup.unique_name', ...)并且$(document).unbind('keyup.unique_name')
2021-04-09 21:03:01
建议使用 e.which(而不是 e.keycode)来检查按下了哪个键。jQuery 规范化 keycode 和 charcode(在旧浏览器中使用)
2021-04-10 21:03:01

keydown事件适用于 Escape,并具有允许您keyCode在所有浏览器中使用的好处此外,您需要将侦听器附加到document而不是主体。

2016 年 5 月更新

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

evt.key所有现代浏览器现在都支持2018 年 9 月更新

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

如果您想知道是否可以安全使用.key,请参阅caniuse.com/#feat=keyboardevent-key
2021-03-25 21:03:01
请注意,您还可以将侦听器添加到<input>元素,因此只有在该元素具有焦点时才会触发它。
2021-03-26 21:03:01
仅供参考,MDN 对 keyCode 的引用(包括弃用节点)
2021-03-29 21:03:01
您还可以检查if (evt.key === 'Escape') {而不是使用已弃用的keyCode
2021-04-02 21:03:01
@Keysox:对于大多数现代浏览器,是的,尽管您现在仍然需要回退。我会编辑我的答案。
2021-04-08 21:03:01

使用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.');
    }
});
Intellij 说您的 vanilla js 代码片段已被弃用。我应该什么时候停止使用它?
2021-03-20 21:03:01

检查keyCode&& which& keyup||keydown

$(document).keydown(function(e){
   var code = e.keyCode || e.which;
   alert(code);
});
@Reigel:确实,按键似乎无法正常工作。无论如何,我无法弄清楚“尴尬”的部分。
2021-03-24 21:03:01
$(document.body).keypress() 没有触发
2021-03-29 21:03:01
KeyPress 为字符键引发(与 KeyDown 和 KeyUp 不同,它们也为非字符键引发),同时按下键。
2021-04-08 21:03:01
我发现这不起作用,jsfiddle.net/GWJVt只是为了逃避……看起来很尴尬?
2021-04-09 21:03:01

下面的代码不仅禁用 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);