630

可能重复:
哪个键码用于 jQuery 的转义键

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

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

10 回答 10

1123

注意:keyCode弃用,请key改用。

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正在被弃用

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


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

使用 jQuery 的转义键的哪个键码

于 2010-07-30T07:59:49.363 回答
256

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

于 2010-07-30T08:18:27.793 回答
45

使用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.');
    }
});
于 2014-07-11T06:06:43.897 回答
18

检查keyCode&& which& keyup||keydown

$(document).keydown(function(e){
   var code = e.keyCode || e.which;
   alert(code);
});
于 2010-07-30T07:57:02.257 回答
12

下面的代码不仅可以禁用 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);
于 2017-01-03T04:07:58.960 回答
9

纯JS

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

此外,如果您想确保没有与键一起按下任何其他键Esc,您可以使用ctrlKeyaltKey和的值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')
              
            }
        }
    });
于 2020-10-20T14:04:47.417 回答
9

纯 JS(无 JQuery)

document.addEventListener('keydown', function(e) {
    if(e.keyCode == 27){
      //add your code here
    }
});
于 2021-01-10T19:26:38.707 回答
8

最好的方法是为此功能

功能:

$.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!');
})
于 2014-11-19T14:00:05.260 回答
3

我认为最简单的方法是香草 javascript:

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

更新:更改键 => keyCode

于 2016-11-30T22:08:45.393 回答
3

在 Firefox 78 上使用这个(“keypress”不适用于 Escape 键):

function keyPress (e)(){
  if (e.key == "Escape"){
     //do something here      
  }
document.addEventListener("keyup", keyPress);
于 2020-07-17T12:10:10.697 回答