2013-07-01 14 views
7

Nel codice seguente:jQuery tasto su/giù Rilevamento tasto non funzionante?

$(document).keypress(function(e) { 
     var code = (e.keyCode ? e.keyCode : e.which); 
     if (code == 40) { 
      alert("down pressed"); 
     } else if (code == 38) { 
      alert("up pressed"); 
     } 
    }); 

Sto cercando di rilevare se si preme il tasto o fino a lungo il tasto. Perché non funziona?

Fiddle http://jsfiddle.net/K9uDn/10/

Sono in cromo

+0

L'evento non è sparare. – crush

+1

Bene, funziona se cambio 'keypress' in' keydown' o 'keyup' (e se rimuovo quelli' self.gotIt() 'e' self.forgotIt() '). Raccomando caldamente di usare comunque 'keyup' o' keydown', anche se non si ha questo problema ... è molto meglio, e tutto è prevedibile con esso. 'keydown' dovrebbe anche sostituire' keypress'. – MiJyn

+2

[jQuery normalizza 'keyCode' e' charCode' con 'which', quindi non è necessario controllarli entrambi. Basta usare 'which'.] (Http://api.jquery.com/event.which/) – crush

risposta

19

Usa keydown invece di pressione dei tasti, alcuni browser non scatta pressione del tasto quando una "chiave speciale (come frecce)" sono premuti

+1

Sì in base al sito Web jQuery: _Nota: poiché l'evento keypress non è coperto da alcuna specifica ufficiale, il comportamento effettivo riscontrato durante l'utilizzo può variare tra browser, versioni del browser e piattaforme. – aug

+0

Fare attenzione quando si preme il tasto per rilevare speciali chiavi. Su alcune piattaforme si spara solo una volta, mentre altre sparano ripetutamente. Prova questo: http://howtodoinjava.com/2013/12/20/jquery-keyup-function-demo/ sul tuo web browser e sulla piattaforma, e scopri con quale frequenza Ctrl scatta quando tieni premuto. Su OEL 6.x si attiva una volta. Su Windows 7 si spara ripetutamente. –

0

sul ('keyup') non funziona in IE. Non nella versione 9 almeno.

0

Ecco il Fiddle di una versione fissa del codice javascript with extra buttons trapped using a switch/case statement

$(document).on('keydown',function(e) { 
     var code = (e.keyCode ? e.keyCode : e.which); 
     switch (code){ 
      case 34: 
      alert("Page down pressed"); 
      break; 
      case 33: 
      alert("Page up pressed"); 
      break; 
      case 40: 
      alert("Down pressed"); 
      break; 
      case 38: 
      alert("Up pressed"); 
      break; 
      case 37: 
      alert("Left pressed"); 
      break; 
      case 39: 
      alert("Right pressed"); 
      break; 
     }