如何检测 IE、Firefox 和 Chrome 中的转义键按下情况? 下面的代码在 IE 中有效并发出警报
27
,但在 Firefox 中它会发出警报 0
$('body').keypress(function(e){
alert(e.which);
if(e.which == 27){
// Close my modal window
}
});
注意:
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
已被弃用
看起来
和keydown
有效,尽管keyup
可能不起作用keypress
$(document).keyup(function(e) {
if (e.key === "Escape") { // escape key maps to keycode `27`
// <DO YOUR WORK HERE>
}
});
keydown
事件适用于 Escape,并且具有允许您在所有浏览器中使用 keyCode
的好处。另外,您需要将侦听器附加到 document
而不是主体。
2016 年 5 月更新
keyCode
现在正处于被弃用的过程中,大多数现代浏览器现在都提供 key
属性,尽管您现在仍然需要一个后备来获得适当的浏览器支持(在编写当前版本的 Chrome 时)并且 Safari 不支持)。
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 你可以检查工作 jsfiddle
document.onkeydown = function(evt) {
evt = evt || window.event;
if (evt.keyCode == 27) {
alert('Esc key pressed.');
}
};
jQuery(document).on('keyup',function(evt) {
if (evt.keyCode == 27) {
alert('Esc key pressed.');
}
});
您可以将侦听器附加到文档的
keyUp
事件。
此外,如果您想确保没有与
Esc
键一起按下任何其他键,您可以使用 ctrlKey
、altKey
和 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')
}
}
});
检查
keyCode
&& which
& keyup
|| keydown
$(document).keydown(function(e){
var code = e.keyCode || e.which;
alert(code);
});
纯JS(无JQuery)
document.addEventListener('keydown', function(e) {
if(e.keyCode == 27){
//add your code 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);
最好的方法是为此提供功能
功能:
$.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!');
})
在 Firefox 78 上使用此(“按键”不适用于 Escape 键):
function keyPress (e)(){
if (e.key == "Escape"){
//do something here
}
document.addEventListener("keyup", keyPress);
我认为最简单的方法是普通的 javascript:
document.onkeyup = function(event) {
if (event.keyCode === 27){
//do something here
}
}
更新:更改密钥 => keyCode
简单的 JavaScript 代码来检测 Escape 键是否被按下
document.addEventListener("keydown",function(e){
if(e.key === "Escape") {
console.log("Escape key pressed")
}
});