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

Mit*_*ran 493 javascript jquery keyevent jquery-events

可能重复:
使用jQuery的escape key的哪个键代码

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

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

Jig*_*shi 915

注:keyCode越来越不赞成使用key来代替.

function keyPress (e) {
    if(e.key === "Escape") {
        // write your logic here.
    }
}
Run Code Online (Sandbox Code Playgroud)

这是jsfiddle


keyCode 被弃用了

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


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

使用jQuery的escape key的哪个键代码

  • 要解除绑定你也可以使用一个命名空间的情况下,`$(文件).在( 'keyup.unique_name',...)`和`$(文件).unbind( 'keyup.unique_name')` (51认同)
  • 取消绑定:$(document).unbind("keyup",keyUpFunc); (10认同)
  • 建议使用e.which(而不是e.keycode)来检查按下了哪个键.jQuery规范化keycode和charcode(在旧版浏览器中使用) (9认同)
  • 你应该总是使用`===`. (8认同)
  • 按键在我的情况下不起作用(firefox 73.0.1)。至少在逃跑时不会。[mdn 声称其已弃用](https://developer.mozilla.org/en-US/docs/Web/API/Document/keypress_event) keyup/keydown 工作正常。 (5认同)
  • @LachlanMcD - 请注意(5 年后!)[`.unbind`](http://api.jquery.com/unbind/) 现在从 jQuery 3.0 开始被弃用......你应该使用 [`.off` ](http://api.jquery.com/off/) (4认同)

Tim*_*own 197

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");
    }
};
Run Code Online (Sandbox Code Playgroud)
Click me then press the Escape key
Run Code Online (Sandbox Code Playgroud)

  • 注意,您还可以将侦听器添加到`<input>`元素,因此只有在此元素具有焦点时才会触发它. (3认同)

Sub*_*axe 35

使用JavaScript,您可以检查工作jsfiddle

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

使用jQuery你可以检查工作jsfiddle

jQuery(document).on('keyup',function(evt) {
    if (evt.keyCode == 27) {
       alert('Esc key pressed.');
    }
});
Run Code Online (Sandbox Code Playgroud)


jAn*_*ndy 15

检查keyCode&& whichkeyup||keydown

$(document).keydown(function(e){
   var code = e.keyCode || e.which;
   alert(code);
});
Run Code Online (Sandbox Code Playgroud)

  • 按下键时,KeyPress会引发字符键(与KeyDown和KeyUp不同,它们也会针对非字符键引发). (3认同)

小智 15

纯 JS(无 JQuery)

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

  • `keyCode` 已弃用 (3认同)

Ivi*_*pić 7

最好的办法就是为此做好准备

功能:

$.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);
            };
        });
    });
};
Run Code Online (Sandbox Code Playgroud)

例:

$("#my-div").escape(function () {
    alert('Escape!');
})
Run Code Online (Sandbox Code Playgroud)

  • 实际上,似乎`keypress`不会触发转义键.至少,不适用于Mac上的Chrome. (4认同)

Tar*_*rik 7

下面的代码不仅禁用ESC键,还检查按下它的条件,根据情况,它将执行或不执行操作.

在这个例子中,

e.preventDefault();
Run Code Online (Sandbox Code Playgroud)

将禁用ESC按键操作.

你可以做任何事情来隐藏div:

document.getElementById('myDivId').style.display = 'none';
Run Code Online (Sandbox Code Playgroud)

按下ESC键的地方也被考虑在内:

(e.target.nodeName=='BODY')
Run Code Online (Sandbox Code Playgroud)

如果你想向所有人申请,你可以删除这个条件部分.或者您可以将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);
Run Code Online (Sandbox Code Playgroud)


Irs*_*had 5

纯JS

您可以将侦听器附加到keyUp文档的事件。

另外,如果你想确保,任何其他键不沿按下Esc按键,你可以使用的值ctrlKeyaltKeyshifkey

 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')
              
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)