2010-05-21 39 views
45

如何捕获按键,例如Ctrl + Z,而不需要在JavaScript中的页面上放置输入元素?似乎在IE中,按键和键盘事件只能绑定到输入元素(输入框,文本区等)捕获按键而不在页面上放置输入元素?

+0

你不应该需要。 – muhmuhten 2010-05-21 01:14:00

+6

为什么不......? – 2010-05-21 08:28:10

+4

@Tim:因为当GUI元素没有聚焦时按下这些按键组合将会非常规,因此违反了“最小惊喜原则”。 – 2011-07-24 18:15:32

回答

31

jQuery的也有极好的实现,它是非常容易使用。这里是你如何可以跨浏览器实现此功能:

$(document).keypress(function(e){ 
    var checkWebkitandIE=(e.which==26 ? 1 : 0); 
    var checkMoz=(e.which==122 && e.ctrlKey ? 1 : 0); 

    if (checkWebkitandIE || checkMoz) $("body").append("<p>ctrl+z detected!</p>"); 
}); 

在IE7测试,火狐3.6.3 &的Chrome 4.1.249.1064

做的另一种方式,这是使用keydown事件和跟踪事件。关键代码。然而,由于归一化的jQuery键码,使用event.which则charCode,其规格建议在各种情况下使用event.which:

$(document).keydown(function(e){ 
if (e.keyCode==90 && e.ctrlKey) 
    $("body").append("<p>ctrl+z detected!</p>"); 
}); 
+0

不知道e.which可以捕捉按键以及鼠标点击!你能告诉我如何获得键码26吗? – powerboy 2010-05-21 01:51:59

+2

键码26是由按键事件(指示CTRL + z)设置的“哪个”的特定ID。要查看keypress事件的更多字符映射,请查看[jQuery文档](http://api.jquery.com/keypress/)或[unixpapa的关键事件测试器](http://unixpapa.com/js /testkey.html) – Trafalmadorian 2010-05-21 02:05:30

+0

Thx。我知道键码的含义。我的意思是,17是Ctrl,90是Z,那么你是怎么得到26号的?我只是google搜索,但无法找到答案。 – powerboy 2010-05-21 03:18:46

-3

document.onkeydown = keyDown;

document.onkeypress = keyPress;

等在IE

对我的作品

+0

你试过在IE6上,并尝试过箭头键吗? – powerboy 2010-05-21 01:28:37

+0

你不解释'keyDown'和'keyPress'是什么。这会引发错误。 – 2017-08-04 07:15:52

7

代码&检测CTRL + Z

document.onkeyup = function(e) { 
    if(e.ctrlKey && e.keyCode == 90) { 
    // ctrl+z pressed 
    } 
} 
47

对于非打印键,例如箭头键和快捷键如Ctrl-Z ,Ctrl-x,Ctrl-c可能会在浏览器中触发某些操作(例如,在可编辑的文档或元素中),则在所有浏览器中可能不会发生按键事件。因此,如果您想要抑制浏览器的默认操作,则必须使用​​。如果没有,keyup也可以。

附加一个​​事件document作品在所有主要浏览器:

document.onkeydown = function(evt) { 
    evt = evt || window.event; 
    if (evt.ctrlKey && evt.keyCode == 90) { 
     alert("Ctrl-Z"); 
    } 
}; 

对于一个完整的参考,我强烈建议Jan Wolter's article on JavaScript key handling

+0

这是否也适用于Android的Chrome? – hendrik 2017-11-16 10:04:22

+0

@hendrik:我不明白为什么它不应该,但我目前无法测试它。 – 2017-11-16 12:40:18

+0

经过测试。有用。 – hendrik 2017-11-16 17:58:47

6

检测按键,包括组合键:这里

window.addEventListener('keydown', function (e) { 
    if (e.ctrlKey && e.keyCode == 90) { 
    // Ctrl + z pressed 
    } 
}); 

的好处是,你是不是覆盖任何全局性,而是仅仅引入副作用。不好,但绝对比这里的其他建议少得多。

0

对于现代的JS,请使用event.key

document.addEventListener("keypress", function onPress(event) { 
    if (event.key === "z" && event.ctrlKey) { 
     // Do something awesome 
    } 
}); 

Mozilla Docs

Supported Browsers

相关问题