捕获按键而不在页面上放置input元素?

如何捕获按键,例如Ctrl + Z,而不用在JavaScript中的页面上放置一个input元素? 似乎在IE中,按键和键入事件只能绑定到input元素(input框,textareas等)

jQuery也有一个很好的实现,非常容易使用。 以下是您如何在浏览器中实现此function的方法:

 $(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>"); }); 

testingIE7,Firefox 3.6.3和Chrome 4.1.249.1064

另一种方法是使用keydown事件并跟踪event.keyCode。 然而,由于jQuery规范化keyCode和charCode使用event.which,他们的规范build议使用event.which在各种情况下:

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

对于可能在浏览器中触发某些操作(例如,在可编辑的文档或元素内)的不可打印的键(例如,Ctrl-z,Ctrl-x,Ctrl-c等快捷键),可能无法获得按键在所有浏览器中的事件。 出于这个原因,如果您想要抑制浏览器的默认操作,则必须使用keydown 。 如果不是的话, keyup也可以。

在所有主要的浏览器中附加一个keydown事件到document中:

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

有关完整的参考资料,我强烈build议Jan Wolter关于JavaScript密钥处理的文章 。

代码&检测ctrl + z

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

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

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

这里的好处是你 覆盖任何全局属性,而只是引入副作用。 不好,但绝对比这里的其他build议less得多的罪恶。

document.onkeydown =的keyDown;

document.onkeypress =按键;

等等

在IE中为我工作