2013-07-01 12 views
7

W poniższym kodzie:jQuery klawisz w górę/w dół wykrywanie klawiszy nie działa?

$(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"); 
     } 
    }); 

Próbuję wykryć czy Klawisz w dół lub w górę jest wciśnięty. Dlaczego to nie działa?

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

jestem w chromie

+0

Impreza nie jest wypalania. – crush

+1

Działa, jeśli zmienię 'keypress' na' keydown' lub 'keyup' (i jeśli usunę te' self.gotIt() 'i' self.forgotIt() '). Zdecydowanie zalecam używanie 'keyup' lub' keydown' tak czy inaczej, nawet jeśli nie masz tego problemu ... jest znacznie lepszy i wszystko jest do przewidzenia. 'keydown' powinno również zastąpić' keypress'. – MiJyn

+2

[jQuery normalizuje 'keyCode' i' charCode' z 'co', więc nie trzeba sprawdzać ich obu. Po prostu użyj 'which'.] (Http://api.jquery.com/event.which/) – crush

Odpowiedz

19

Zastosowanie keyDown zamiast przyciśnięcie, niektóre przeglądarki nie ogień przyciśnięcie gdy "specjalny klucz (jak strzały)" są wciśnięte

+1

Yup zgodnie z witryną jQuery: _Uwaga: ponieważ zdarzenie keypress nie jest objęte żadną oficjalną specyfikacją, rzeczywiste zachowanie podczas korzystania z niego może się różnić w różnych przeglądarkach, wersjach przeglądarek i platformach. – aug

+0

Należy zachować ostrożność za pomocą naciśnięcia klawisza w celu wykrycia wyjątku klawiatura. Na niektórych platformach wystrzeliwuje tylko jeden raz, a inne będą powtarzały się powtarzalnie. Wypróbuj to: http://howtodoinjava.com/2013/12/20/jquery-keyup-function-demo/ na swojej przeglądarce i platformie, i zobacz, jak często Ctrl wystrzeliwuje po przytrzymaniu. Na OEL 6.x strzela jeden raz. W systemie Windows 7 uruchamia się powtarzalnie. –

0

na ('keyup') nie działa w IE. Nie przynajmniej w wersji 9.

0

Oto Fiddle stałej wersji kodu 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; 
     } 
Powiązane problemy