Pau*_*ton 65 javascript combinations ctrl
我试图用这段代码在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键不会按预期生成警报.
代码有什么问题?
zer*_*kms 84
onkeydown(或onkeyup),不是onkeypresskeyCode90,而不是122在线演示:http://jsfiddle.net/29sVC/
为了澄清,密钥代码与字符代码不同.
字符代码用于文本(它们根据编码而不同,但在很多情况下,0-127仍然是ASCII代码).键码映射到键盘上的键.例如,在unicode中,字符0x22909表示?.没有很多键盘(如果有的话)实际上有一把钥匙.
操作系统负责使用用户配置的输入方法将击键转换为字符代码.结果将发送到按键事件.(而keydown和keyup响应用户按下按钮,而不是键入文本.)
laz*_*azd 61
对于偶然发现这个问题的未来人们,这里有一个更好的方法来完成工作:
document.addEventListener('keydown', function(event) {
if (event.ctrlKey && event.key === 'z') {
alert('Undo!');
}
});
Run Code Online (Sandbox Code Playgroud)
使用event.key大大简化了代码,删除了硬编码的常量。它支持 IE 9+。
此外,使用document.addEventListener意味着您不会破坏同一事件的其他侦听器。
最后,没有理由使用window.event. 它被积极劝阻,并可能导致脆弱的代码。
小智 11
Ctrl+ t也是可能的...只需使用84键码即可
if (evtobj.ctrlKey && evtobj.keyCode == 84)
alert("Ctrl+t");
Run Code Online (Sandbox Code Playgroud)
$(document).keydown(function(e){
if( e.which === 89 && e.ctrlKey ){
alert('control + y');
}
else if( e.which === 90 && e.ctrlKey ){
alert('control + z');
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
71484 次 |
| 最近记录: |