Захват комбинации клавиш ctrl+z в javascript


Я пытаюсь захватить ctrl+z комбинация клавиш в javascript с этим кодом:

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

прокомментированная строка "test1" генерирует предупреждение, если я удерживаю ctrl ключ и нажмите любую другую клавишу.

прокомментированная строка "test2" генерирует предупреждение, если я нажимаю z ключ.

положите их вместе в соответствии со строкой после "test 1 & 2", и удерживая ctrl затем нажмите клавишу z ключ не генерирует предупреждение, как ожидалось.

что не так с кодом?

6 51

6 ответов:

  1. использовать onkeydown (или onkeyup), а не onkeypress
  2. использовать keyCode 90, не 122

онлайн демо:http://jsfiddle.net/29sVC/

разъяснить коды клавиш не совпадают с кодами символов.

коды символов предназначены для текста (они различаются в зависимости от кодировки, но во многих случаях 0-127 остаются кодами ASCII). Коды клавиш сопоставляются с клавишами на клавиатуре. Например, в юникоде символ 0x22909 значит 好. Есть не так много клавиатур (если таковые имеются), которые на самом деле имеют ключ для этого.

ОС заботится о преобразовании нажатий клавиш в коды символов с помощью методов ввода, настроенных пользователем. Результаты отправляются в событие нажатия клавиши. (В то время как keydown и keyup реагируют на нажатие пользователем кнопок, а не на ввод текста.)

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, чтобы исключительно выполнять ваши пользовательские функции.

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

демо

этот плагин, сделанный мной, может быть полезен.

плагин

вы можете использовать этот плагин вы должны предоставить ключ коды и функции будут работать так

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

в коде я показал, как выполнить для Ctrl+Z. Вы получите подробную документацию по ссылке. Плагин находится в разделе кода JavaScript моего пера на Codepen.

используйте этот код 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
       }
    });