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

时间:2010-07-30 07:54:18

标签: javascript jquery javascript-events key

  

可能重复:
  Which keycode for escape key with jQuery

如何在IE,Firefox和Chrome中检测转义键? 以下代码适用于IE和警报27,但在Firefox中,它会提醒0

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

10 个答案:

答案 0 :(得分:876)

注意:keyCode getting deprecated使用key代替function keyPress (e) { if(e.key === "Escape") { // write your logic here. } }

keyCode

这是jsfiddle


keydown已弃用

  

似乎keyupkeypress有效,即使$(document).keyup(function(e) { if (e.key === "Escape") { // escape key maps to keycode `27` // <DO YOUR WORK HERE> } }); 可能不会


{{1}}

Which keycode for escape key with jQuery

答案 1 :(得分:187)

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

答案 2 :(得分:31)

使用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.');
    }
});

答案 3 :(得分:15)

检查keyCode&amp;&amp; which&amp; keyup || keydown

$(document).keydown(function(e){
   var code = e.keyCode || e.which;
   alert(code);
});

答案 4 :(得分: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);
            };
        });
    });
};

示例:

$("#my-div").escape(function () {
    alert('Escape!');
})

答案 5 :(得分:7)

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

在此示例中,

e.preventDefault();

将禁用ESC按键操作。

你可以做任何事情,比如隐藏一个div:

document.getElementById('myDivId').style.display = 'none';

还要考虑按下ESC键:

(e.target.nodeName=='BODY')

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

答案 6 :(得分:3)

纯 JS(无 JQuery)

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

答案 7 :(得分:2)

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

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

答案 8 :(得分:2)

在Firefox 78上使用此功能(“键”不适用于Escape键):

function keyPress (e)(){
  if (e.key == "Escape"){
     //do something here      
  }
document.addEventListener("keyup", keyPress);

答案 9 :(得分:0)

纯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')
              
            }
        }
    });