捕获按键而不在页面上放置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中为我工作