2013-04-15 25 views
42

Sto cercando di catturare Ctrl + z combinazione di tasti in javascript con questo codice:Capturing Ctrl + combinazione di tasti z 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> 

linea Commentate "test1" genera l'avviso se tengo premuto il tasto ctrl e premere qualsiasi altro tasto.

La riga commentata "test2" genera l'avviso se si preme la chiave z.

metterli insieme come per la linea dopo "test 1 & 2", e tenendo premuto il tasto Ctrl chiave quindi premendo il z chiave non genera l'avviso come previsto.

Cosa c'è di sbagliato nel codice?

risposta

56
  1. Usa onkeydown (o onkeyup), non onkeypress
  2. Usa keyCode 90, non 122

Demo in linea: http://jsfiddle.net/29sVC/

Per chiarire, keycodes non sono gli stessi codici di carattere .

I codici dei caratteri sono per testo (differiscono in base alla codifica, ma in molti casi 0-127 rimangono codici ASCII). I codici chiave sono associati ai tasti su una tastiera. Ad esempio, nel carattere unicode 0x22909 significa 好. Non ci sono molte tastiere (se ce ne sono) che hanno effettivamente una chiave per questo.

Il sistema operativo si occupa di trasformare le sequenze di tasti in codici carattere utilizzando i metodi di input configurati dall'utente. I risultati vengono inviati all'evento keypress. (Mentre keydown e keyup rispondere all'utente premendo i tasti, non digitando il testo.)

+1

Grazie, che funziona. Perché non onkeypress e keyCode 122 funzionano? –

+1

@Paul Johnston: Non ho una buona spiegazione per quello :-( – zerkms

+0

Come prevenireDefault() invece di avviso nella soluzione per favore? Sto testando per Ctrl + t. –

7

Ctrl +t è inoltre possibile ... basta utilizzare il codice chiave come 84 come

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

90 è la chiave Z e questo farà la cattura necessaria ...

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

a seconda delle esigenze si potrebbe desiderare di aggiungere un e.preventDefault(); all'interno della dichiarazione if per eseguire esclusivamente le funzionalità personalizzate.

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

Questo plugin Realizzato da me può essere utile.

Plugin

È possibile utilizzare questo plugin è necessario fornire i codici chiave e funzione da eseguire come questo

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

Nel codice ho mostrato come effettuare per Ctrl + Z. Otterrete la documentazione dettagliata sul link. Il plugin è nella sezione Codice JavaScript della mia penna su Codepen.

-1

utilizzare questo codice per CTRL +Z. keycode per Z nella pressione dei tasti è 122 e l'CTRL +Z è 26. verifica questo codice di accesso nella vostra zona console

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