如何在IE,Firefox和Chrome中检测转义键?
以下代码适用于IE和警报27
,但在Firefox中,它会提醒0
$('body').keypress(function(e){
alert(e.which);
if(e.which == 27){
// Close my modal window
}
});
答案 0 :(得分:876)
注意:keyCode
getting deprecated使用key
代替function keyPress (e) {
if(e.key === "Escape") {
// write your logic here.
}
}
。
keyCode
这是jsfiddle
keydown
已弃用
似乎
keyup
和keypress
有效,即使$(document).keyup(function(e) { if (e.key === "Escape") { // escape key maps to keycode `27` // <DO YOUR WORK HERE> } });
可能不会
{{1}}
答案 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(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)
您可以将侦听器附加到文档的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')
}
}
});