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

< p > # EYZ0 < br > # EYZ0 < / p >

如何在IE, Firefox和Chrome中检测escape键? 下面的代码在IE中工作并提醒27,但在Firefox中它提醒0

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

检查keyCode &&# EYZ1,# eyz2 || # eyz3

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

注意: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 is becoming deprecated

It seems keydown and keyup work, even though keypress may not


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

哪个键代码为转义键与jQuery

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 then press the Escape key

使用JavaScript你可以检查< a href = " http://jsfiddle.net/m9w8m/ " > jsfiddle < / >

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

使用jQuery你可以检查< a href = " http://jsfiddle.net/MQHVa/1/ " > jsfiddle < / >

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

最好的方法是为它构造函数

功能:

$.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!');
})

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

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

更新:更改键=>键码

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

在Firefox 78中使用这个("keypress"不工作的Escape键):

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

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

}
}
});

纯JS(没有JQuery)

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