Erfassen der Tastenkombination Strg + Z in Javascript

84

Ich versuche, ctrl+ zTastenkombination in Javascript mit diesem Code zu erfassen :

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

Die kommentierte Zeile "test1" generiert den Alarm, wenn ich die ctrlTaste gedrückt halte und eine andere Taste drücke.

Die kommentierte Zeile "test2" generiert den Alarm, wenn ich die zTaste drücke .

Setzen Sie sie gemäß "Zeile 1 & 2" gemäß der Zeile zusammen. Wenn Sie die ctrlTaste gedrückt halten und dann die Taste drücken, zwird der Alarm nicht wie erwartet generiert.

Was ist los mit dem Code?

Paul Johnston
quelle

Antworten:

95
  1. Verwenden Sie onkeydown(oder onkeyup) nichtonkeypress
  2. Verwenden Sie keyCode90, nicht 122

Online-Demo: http://jsfiddle.net/29sVC/

Zur Verdeutlichung sind Schlüsselcodes nicht mit Zeichencodes identisch.

Zeichencodes gelten für Text (sie unterscheiden sich je nach Codierung, bleiben jedoch in vielen Fällen 0-127 ASCII-Codes). Tastencodes werden Tasten auf einer Tastatur zugeordnet. Zum Beispiel bedeutet im Unicode-Zeichen 0x22909 好. Es gibt nicht viele Tastaturen (falls vorhanden), die tatsächlich eine Taste dafür haben.

Das Betriebssystem sorgt dafür, dass Tastenanschläge mithilfe der vom Benutzer konfigurierten Eingabemethoden in Zeichencodes umgewandelt werden. Die Ergebnisse werden an das Tastendruckereignis gesendet. (Während Keydown und Keyup darauf reagieren, dass der Benutzer Tasten drückt und keinen Text eingibt.)

zerkms
quelle
1
Danke, das funktioniert. Warum funktionieren onkeypress und keyCode 122 nicht?
Paul Johnston
Wie können Sie Default () verhindern, anstatt in Ihrer Lösung zu alarmieren? Ich teste auf Strg + t.
Surendra Jnawali
@ SJnawali: Ich bin nicht sicher, ob es möglich ist fürctrl+t
zerkms
4
Warum funktioniert keyCode 122 nicht? Nun, 122ist für F11 Schlüssel :)
Baby
7
@PaulJohnston Weil ein Schlüsselcode nicht mit einem Zeichencode identisch ist . Zeichencodes gelten für Text (sie unterscheiden sich je nach Codierung, bleiben jedoch in vielen Fällen 0-127 ASCII-Codes). Tastencodes werden Tasten auf einer Tastatur zugeordnet. Zum Beispiel bedeutet 0x22909 im Unicode-Zeichen 好. Es gibt nicht viele Tastaturen (falls vorhanden), die tatsächlich eine Taste dafür haben. Das Betriebssystem sorgt dafür, dass Tastenanschläge mithilfe der vom Benutzer konfigurierten Eingabemethoden in Zeichencodes umgewandelt werden. Die Ergebnisse werden an die keypressVeranstaltung gesendet . (Während keydownund keyupreagieren auf den Benutzer, der Tasten drückt, keinen Text eingibt.)
Aidiakapi
28

Für zukünftige Leute, die über diese Frage stolpern, ist hier eine bessere Methode, um die Arbeit zu erledigen:

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

Die Verwendung event.keyvereinfacht den Code erheblich und entfernt fest codierte Konstanten. Es unterstützt IE 9+.

Darüber hinaus document.addEventListenerbedeutet die Verwendung, dass Sie andere Listener nicht auf dasselbe Ereignis aufmerksam machen.

Schließlich gibt es keinen Grund zu verwenden window.event. Es wird aktiv davon abgeraten und kann zu fragilem Code führen.

lazd
quelle
Außerdem möchte ich hinzufügen, dass dies KeyboardEvent.keyCodeseit ein paar Jahren veraltet ist. Der beste Weg, alle Browser zu erfassen, besteht darin, e.keyzuerst zu prüfen und dann auf zurückzugreifen e.keyCode. Oder Sie können diese Polyfüllung verwenden
Ja, Barry
9

Ctrl+ tist auch möglich ... benutze einfach den Schlüsselcode als 84 like

if (evtobj.ctrlKey && evtobj.keyCode == 84) 
 alert("Ctrl+t");
chandramouli.jamadagni
quelle
6
$(document).keydown(function(e){
  if( e.which === 89 && e.ctrlKey ){
     alert('control + y'); 
  }
  else if( e.which === 90 && e.ctrlKey ){
     alert('control + z'); 
  }          
});

Demo

Mehtab
quelle
3

90 ist der ZSchlüssel und dies wird die notwendige Erfassung durchführen ...

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

Abhängig von Ihren Anforderungen möchten Sie möglicherweise eine e.preventDefault();if-Anweisung hinzufügen, um ausschließlich Ihre benutzerdefinierten Funktionen auszuführen.

JDandChips
quelle
-3

Dieses von mir erstellte Plugin kann hilfreich sein.

Plugin

Mit diesem Plugin müssen Sie die Schlüsselcodes und Funktionen angeben, um so ausgeführt zu werden

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

Im Code habe ich gezeigt, wie man für Ctrl+ arbeitet Z. Sie erhalten eine detaillierte Dokumentation über den Link. Das Plugin befindet sich im JavaScript-Code-Bereich meines Stifts auf Codepen.

10011101111
quelle
-5

Verwenden Sie diesen Code für CTRL+ Z. Der Schlüsselcode für den ZTastendruck ist 122 und das CTRL+ Zist 26. Überprüfen Sie diesen Schlüsselcode in Ihrem Konsolenbereich

 $(document).on("keypress", function(e) {
       console.log(e.keyCode);
       /*ctrl+z*/
       if(e.keyCode==26)
       {
          //your code here
       }
    });
karthikeyan ganesan
quelle