我正在尝试使用以下代码在 javascript 中捕获 ctrl
+ z
组合键:
<html>
<head>
<title>Untitled Document</title>
</head>
<body>
<script type='text/javascript'>
function KeyPress(e) {
var evtobj = window.event? event : e
//test1 if (evtobj.ctrlKey) alert("Ctrl");
//test2 if (evtobj.keyCode == 122) alert("z");
//test 1 & 2
if (evtobj.keyCode == 122 && evtobj.ctrlKey) alert("Ctrl+z");
}
document.onkeypress = KeyPress;
</script>
</body>
</html>
如果我按住 ctrl
键并按任何其他键,注释行“test1”会生成警报。
如果我按 z
键,注释行“test2”会生成警报。
按照“测试 1 和 2”之后的行将它们放在一起,按住 ctrl
键然后按 z
键不会按预期生成警报。
代码有什么问题?
原文由 Paul Johnston 发布,翻译遵循 CC BY-SA 4.0 许可协议
onkeydown
(或onkeyup
),而不是onkeypress
keyCode
90,而不是 122在线演示:http: //jsfiddle.net/29sVC/
澄清一下, 键码与字符代码不同。
字符代码用于文本(它们因编码而异,但在很多情况下 0-127 仍然是 ASCII 代码)。键码映射到键盘上的键。例如,在 unicode 字符 0x22909 中表示好。实际上拥有此键的键盘(如果有的话)并不多。
操作系统负责使用用户配置的输入法将击键转换为字符代码。结果被发送到按键事件。 (而 keydown 和 keyup 响应用户按下按钮,而不是键入文本。)