Próbuję przechwycić kombinację klawiszy ctrl+ zw javascript za pomocą tego kodu:
<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>
Skomentowana linia „test1” generuje alert, jeśli przytrzymam ctrlklawisz i naciśnę dowolny inny klawisz.
Skomentowana linia „test2” generuje alert, jeśli naciśnę zklawisz.
Połącz je zgodnie z linią po „teście 1 i 2”, a przytrzymanie ctrlklawisza, a następnie naciśnięcie zklawisza nie generuje powiadomienia zgodnie z oczekiwaniami.
Co jest nie tak z kodem?
źródło
ctrl+t
122
jest dla klawisza F11 :)keypress
wydarzenie. (Natomiastkeydown
ikeyup
Dla przyszłych ludzi, którzy natkną się na to pytanie, oto lepsza metoda wykonania zadania:
document.addEventListener('keydown', function(event) { if (event.ctrlKey && event.key === 'z') { alert('Undo!'); } });
Używanie
event.key
znacznie upraszcza kod, usuwając zakodowane stałe. Obsługuje IE 9+.Dodatkowo użycie
document.addEventListener
oznacza, że nie będziesz przesyłać innych słuchaczy do tego samego zdarzenia.Wreszcie nie ma powodu, aby używać
window.event
. Jest to aktywnie odradzane i może skutkować delikatnym kodem.źródło
KeyboardEvent.keyCode
od kilku lat jest to przestarzałe. Najlepszym sposobem na przechwycenie wszystkich przeglądarek jeste.key
najpierw sprawdzenie, a następnie powrót doe.keyCode
. Lub możesz użyć tego polyfilluCtrl+ tjest również możliwe ... po prostu użyj kodu dostępu jako 84 jak
if (evtobj.ctrlKey && evtobj.keyCode == 84) alert("Ctrl+t");
źródło
$(document).keydown(function(e){ if( e.which === 89 && e.ctrlKey ){ alert('control + y'); } else if( e.which === 90 && e.ctrlKey ){ alert('control + z'); } });
Próbny
źródło
90 jest Zkluczem, a to zrobi niezbędne przechwytywanie ...
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 } }
W zależności od wymagań możesz chcieć dodać
e.preventDefault();
w swoim oświadczeniu if, aby wyłącznie wykonywać swoją niestandardową funkcjonalność.źródło
Ta wtyczka stworzona przeze mnie może być pomocna.
Podłącz
Możesz użyć tej wtyczki, musisz podać kluczowe kody i funkcje, aby działać w ten sposób
simulatorControl([17,90], function(){console.log('You have pressed Ctrl+Z');});
W kodzie pokazałem jak wykonać dla Ctrl+ Z. Otrzymasz szczegółową dokumentację pod linkiem. Wtyczka znajduje się w sekcji kodu JavaScript Mojego pióra na Codepen.
źródło
Użyj tego kodu dla CTRL+ Z. keycode dlaZ naciśnięcia klawisza to 122, a CTRL+ Zto 26. Sprawdź ten kod w obszarze konsoli
$(document).on("keypress", function(e) { console.log(e.keyCode); /*ctrl+z*/ if(e.keyCode==26) { //your code here } });
źródło