如何在不使用JavaScript在页面上放置输入元素的情况下捕获按键,例如Ctrl + Z?似乎在IE中,按键和键入事件只能绑定到输入元素(输入框,文本区域等)
如何在不使用JavaScript在页面上放置输入元素的情况下捕获按键,例如Ctrl + Z?似乎在IE中,按键和键入事件只能绑定到输入元素(输入框,文本区域等)
<canvas>,尽管我同意在发出关键事件之前应该强迫任何此类元素具有焦点。使用tabindex属性将使元素在其他情况下无法获得焦点。
Answers:
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,Firefox 3.6.3和Chrome 4.1.249.1064中测试
另一种方法是使用keydown事件并跟踪event.keyCode。但是,由于jQuery使用event.which规范化了keyCode和charCode,因此他们的规范建议在各种情况下使用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");
}
};
要获得完整的参考,我强烈建议Jan Wolter撰写有关JavaScript密钥处理的文章。