Я пытаюсь захватить комбинацию клавиш 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клавиши не генерирует предупреждение, как ожидалось.
Что не так с кодом?
источник
ctrl+t
122
это для клавиши F11 :)keypress
мероприятие. (В то время какkeydown
иkeyup
реагировать на пользователя, нажимая кнопки, а не набирая текст.)Для будущих людей, которые столкнутся с этим вопросом, вот лучший способ выполнить работу:
document.addEventListener('keydown', function(event) { if (event.ctrlKey && event.key === 'z') { alert('Undo!'); } });
Использование
event.key
значительно упрощает код, удаляя жестко запрограммированные константы. Имеет поддержку IE 9+.Кроме того, использование
document.addEventListener
означает, что вы не будете сбивать других слушателей с того же события.Наконец, нет причин использовать
window.event
. Это очень не рекомендуется и может привести к нестабильному коду.источник
KeyboardEvent.keyCode
теперь он устарел пару лет назад. Лучший способ захватить все браузеры -e.key
сначала проверить, а затем вернуться кe.keyCode
. Или вы можете использовать этот полифиллCtrl+ tтакже возможно ... просто используйте код клавиши 84, например
if (evtobj.ctrlKey && evtobj.keyCode == 84) alert("Ctrl+t");
источник
$(document).keydown(function(e){ if( e.which === 89 && e.ctrlKey ){ alert('control + y'); } else if( e.which === 90 && e.ctrlKey ){ alert('control + z'); } });
Демо
источник
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.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.
источник
Этот созданный мной плагин может быть вам полезен.
Плагин
Вы можете использовать этот плагин, чтобы указать ключевые коды и функции, которые будут запускаться следующим образом
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 } });
источник