我试图用这段代码在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>
Run Code Online (Sandbox Code Playgroud)
如果我按住ctrl键并按任何其他键,注释行"test1"将生成警报.
如果我按下z键,注释行"test2"会生成警报.
在"测试1和2"之后按照线路将它们放在一起,按住ctrl键然后按下z键不会按预期生成警报.
代码有什么问题?
如果用户按下该键,则会触发多个keydown事件.出于可用性原因,我需要使用keydown,而不是keyup,但我想避免这种情况.我的相关代码如下:
$(document).keydown(function(e) {
var key = 0;
if (e == null) { key = event.keyCode;}
else { key = e.which;}
switch(key) {
case config.keys.left:
goLeft();
break;
case config.keys.up:
goUp();
break;
case config.keys.right:
goRight();
break;
case config.keys.down:
goDown();
break;
case config.keys.action:
select();
break;
}
});
Run Code Online (Sandbox Code Playgroud)
因此,当用户按下向下键时,goDown()会被多次触发.即使用户按住键,我也希望它只触发一次.