在javascript中捕获ctrl + z组合键
我试图捕捉在这个代码与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”会生成警报。
在“testing1&2”之后按照线路放在一起,按住ctrl键,然后按z键不会按预期产生警报。
代码有什么问题?
- 使用
onkeydown
(或onkeyup
),而不是onkeypress
- 使用
keyCode
90,而不是122
在线演示: http : //jsfiddle.net/29sVC/
为了澄清, 键码与字符码不一样。
字符代码是用于文本的(它们根据编码而不同,但在很多情况下0-127仍然是ASCII代码)。 按键代码映射到键盘上的按键。 例如,在unicode字符中,0x22909表示好。 没有太多的键盘(如果有的话)谁实际上有这个关键。
操作系统负责使用用户configuration的input方法将按键转换为字符代码。 结果被发送到按键事件。 (keydown和keyup响应用户按下button,而不是键入文本。)
Ctrl + T也是可以的…只要使用84就像使用键码
if (evtobj.ctrlKey && evtobj.keyCode == 84) alert("Ctrl+t");
90是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 } }
根据您的要求,您可能希望添加一个e.preventDefault();
在你的if语句中完全执行你的自定义function。
$(document).keydown(function(e){ if( e.which === 89 && e.ctrlKey ){ alert('control + y'); } else if( e.which === 90 && e.ctrlKey ){ alert('control + z'); } });
演示
这个由我做的插件可能会有所帮助。
插入
你可以使用这个插件来提供关键的代码和function,像这样运行
simulatorControl([17,90], function(){console.log('You have pressed Ctrl+Z');});
在代码中我已经显示了如何执行Ctrl + Z。 你会得到详细的文件在链接上。 插件是在我的笔在Codepen的JavaScript代码部分。
将此代码用于CTRL + Z。 按键中Z的键码是122, CTRL + Z是26.在控制台区域检查这个键码
$(document).on("keypress", function(e) { console.log(e.keyCode); /*ctrl+z*/ if(e.keyCode==26) { //your code here } });