2013-04-15 9 views
42

Ich versuche ctrl + z Tastenkombination in Javascript mit diesem Code zu erfassen:Capturing Strg + Z Tastenkombination in 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> 

kommentiert line "test1" erzeugt die Warnung, wenn ich nach unten halten Drücken Sie die Taste ctrl und drücken Sie eine beliebige andere Taste.

Kommentarzeile "test2" generiert den Alarm, wenn ich den Schlüssel z drücke.

sie nach der Zeile nach „test 1 & 2“ Put zusammen, und die ctrl Taste drücken Sie dann die z Schlüssel erzeugen nicht die Warnung als erwartet gedrückt gehalten wird.

Was ist falsch an dem Code?

Antwort

56
  1. Verwendung onkeydown (oder onkeyup), nicht onkeypress
  2. Verwenden keyCode 90, nicht 122

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

Um zu klären, keycodes sind nicht das gleiche wie Zeichencodes .

Zeichencodes sind für Text (sie unterscheiden sich je nach Codierung, aber in vielen Fällen bleiben 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 einen Schlüssel dafür haben.

Das Betriebssystem kümmert sich um die Umwandlung von Tastenanschlägen in Zeichencodes unter Verwendung der vom Benutzer konfigurierten Eingabemethoden. Die Ergebnisse werden an das Keypress-Ereignis gesendet. (Während keydown und keyup dem Benutzer zu reagieren Tasten drücken, nicht der Texteingabe.)

+1

Danke, das funktioniert. Warum funktioniert onkeypress und keyCode 122 nicht? –

+1

@Paul Johnston: Ich habe keine gute Erklärung dafür :-( – zerkms

+0

Wie zu verhindernDefault() statt Warnung in Ihrer Lösung bitte? Ich teste für Strg + t. –

7

Ctrl +t ist auch möglich, ... benutzen Sie einfach den Schlüsselcode als 84 wie

if (evtobj.ctrlKey && evtobj.keyCode == 84) 
alert("Ctrl+t"); 
3

90 ist die Z Schlüssel, und dies wird die notwendige Erfassung tun ...

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

Je nach Bedarf können Sie einhinzufügeninnerhalb Ihrer if-Anweisung, um ausschließlich Ihre benutzerdefinierten Funktionen auszuführen.

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

Demo

-1

Dieses Plugin von mir gemacht hilfreich sein kann.

Plugin

können Sie dieses Plugin verwenden Sie die Tastencodes zu versorgen haben und funktionieren wie dieses

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

ich, wie für Ctrl + ausführen angezeigt haben Sie im Code ausgeführt werden Z. Sie erhalten detaillierte Dokumentation über den Link. Plugin ist in JavaScript Code Abschnitt meines Stiftes auf Codepen.

-1

Verwenden Sie diesen Code für CTRL + Z. keycode für Z in keypress ist 122 und die CTRL +Z ist 26. Check dieser Schlüsselcode in Ihrer Konsole Bereich

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