在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键不会按预期产生警报。

代码有什么问题?

  1. 使用onkeydown (或onkeyup ),而不是onkeypress
  2. 使用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 } });