在javascript中捕获ctrl + z组合键

时间:2013-04-15 02:00:58

标签: 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>

如果我按住 ctrl 键并按任何其他键,则注释行“test1”会生成警报。

如果按 z 键,注释行“test2”会生成警报。

按照“测试1&amp; 2”之后的行将它们放在一起,然后按住 ctrl 键然后按 z 键不会生成警报预期

代码有什么问题?

8 个答案:

答案 0 :(得分:80)

  1. 使用onkeydown(或onkeyup),而不是onkeypress
  2. 使用keyCode 90,而不是122
  3. 在线演示:http://jsfiddle.net/29sVC/

    为了澄清,密钥代码与字符代码不同。

    字符代码用于文本(它们根据编码而不同,但在很多情况下,0-127仍然是ASCII代码)。键码映射到键盘上的键。例如,在unicode字符中,0x22909表示好。没有很多键盘(如果有的话)实际上有一把钥匙。

    操作系统负责使用用户配置的输入方法将击键转换为字符代码。结果将发送到按键事件。 (而keydown和keyup响应用户按下按钮,而不是键入文本。)

答案 1 :(得分:10)

Ctrl + t 也可以......只需使用键码84就像

if (evtobj.ctrlKey && evtobj.keyCode == 84) 
 alert("Ctrl+t");

答案 2 :(得分:7)

$(document).keydown(function(e){
  if( e.which === 89 && e.ctrlKey ){
     alert('control + y'); 
  }
  else if( e.which === 90 && e.ctrlKey ){
     alert('control + z'); 
  }          
});

Demo

答案 3 :(得分:4)

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
     }
}

根据您的要求,您可能希望在if语句中添加e.preventDefault();以专门执行自定义功能。

答案 4 :(得分:0)

对于那些偶然发现此问题的人们来说,这是一种更好的方法来完成工作:

document.addEventListener('keydown', function(event) {
  if (event.ctrlKey && event.key === 'z') {
    alert('Undo!');
  }
});

使用event.key可以大大简化代码,并删除硬编码的常量。它支持IE 9+,请参见此处的文档:https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/key

此外,使用document.addEventListener意味着您不会破坏其他听众对同一事件的了解。参见https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

最后,没有理由使用window.event,它不鼓励使用getScreenshotAs()并可能导致代码脆弱。参见https://developer.mozilla.org/en-US/docs/Web/API/Window/event

答案 5 :(得分:0)

document.onkeydown = function (e) {
    var special = e.ctrlKey || e.shiftKey;
    var key = e.charCode || e.keyCode;
  console.log(key.length);
  if (special && key == 38 || special && key == 40 ) { 
    // enter key do nothing
    e.preventDefault();
  }        
}

这是一种阻止两个键(shift +或Ctrl +组合键)的方法。

&&帮助组合键,如果没有组合键,它将阻止所有ctrl或Shift键。

答案 6 :(得分:-1)

这个插件由我制作可能会有所帮助。

Plugin

您可以使用此插件提供密钥代码和功能,以便像这样运行

simulatorControl([17,90], function(){console.log('You have pressed Ctrl+Z');});

在代码中,我展示了如何执行 Ctrl + Z 。您将在链接上获得详细文档。插件位于我的Pen on Codepen的JavaScript代码部分。

答案 7 :(得分:-2)

将此代码用于 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
       }
    });