我正在尝试使用以下代码在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键不会产生预期的警报。
代码有什么问题?
onkeydown
(或onkeyup
),而不是onkeypress
keyCode
90,而不是122在线演示:http://jsfiddle.net/29sVC/
为澄清起见,键码与字符码不同。
字符代码用于文本(它们根据编码而有所不同,但是在许多情况下,ASCII代码仍为0-127)。键码映射到键盘上的键。例如,在Unicode字符中,0x22909表示好。实际上,没有多少键盘(如果有的话)具有按键。
操作系统负责使用用户配置的输入法将击键转换为字符代码。结果发送到按键事件。 (而按下和按下则响应用户按下按钮,而不输入文本。)
对于那些偶然发现此问题的人,这是完成工作的一种更好的方法:
document.addEventListener('keydown', function(event) {
if (event.ctrlKey && event.key === 'z') {
alert('Undo!');
}
});
使用event.key
大大简化了代码,删除了硬编码的常量。它支持IE 9 +。
此外,使用event.key
表示您不会破坏其他听众对同一事件的了解。
最后,没有理由使用document.addEventListener
。我们不鼓励这样做,并可能导致代码脆弱。
Ctrl + t也可以...只需将键码设为84,如
document.addEventListener
window.event
window.event
90是Z键,这将进行必要的捕获...
if (evtobj.ctrlKey && evtobj.keyCode == 84)
alert("Ctrl+t");
根据您的要求,您可能希望在if语句中添加$(document).keydown(function(e){
if( e.which === 89 && e.ctrlKey ){
alert('control + y');
}
else if( e.which === 90 && e.ctrlKey ){
alert('control + z');
}
});
以专门执行您的自定义功能。
我自己制作的此插件可能会有所帮助。
您可以使用此插件,您必须提供要运行的关键代码和功能
function KeyPress(e){
// Ensure event is not null
e = e || window.event;
if ((e.which == 90 || e.keyCode == 90) && e.ctrlKey) {
// Ctrl + Z
// Do Something
}
}
在代码中,我显示了如何执行Ctrl + Z。您将在链接上获得“详细文档”。插件在我在Codepen上的笔的JavaScript代码部分中。
将此代码用于CTRL + Z。按键中Z的键码是122,CTRL + Z的键码是26。在控制台区域中检查此键码
e.preventDefault();