Захват комбинации клавиш 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 ответов:
- использовать
onkeydown
(илиonkeyup
), а неonkeypress
- использовать
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.