tverrleser tastetrykk for spesialtaster (piler,...) i javascript


Jeg bygger et nettlesergrensesnitt til et terminal. Jeg trenger å fange både tegn- (alfanumeriske, punktum, skråstrek, ...) og ikke-tegn-tastetrykk (piler, F1-F12, ...). I tillegg, hvis brukeren holder en tast nede, ville det være fint å få gjentatte tastetrykk (funksjonen bør kalles gjentatte ganger til tasten slippes). Det samme gjelder mellomromstasten, tegn, ...

Jeg vil at dette skal være så tvers-gjennom-nettlesere som mulig (jQuery keypress feiler på det området). Jeg har også prøvd å bruke en fork av jquery.hotkeys.js, men hvis jeg forstår det riktig, kan jeg ikke fange både spesial- og tegn-taster i en enkelt funksjon (man bør bruke keydown for den første og keyup for den siste).

Finnes det et JS-bibliotek som lar meg fange både bokstav- og spesialtaster?

Jeg håper jeg ikke overser noe åpenbart. :)

OPPDATERING For å klargjøre: Jeg ser etter biblioteket som vil skjule nettleserens implementasjonsdetaljer fra meg.

Svar #1

onkeydown er akkurat det du trenger. Den fanger opp alle taster, selv om du holder nede en knapp, utløses den gjentatte ganger.

<input type='text' onkeydown='return myFunc(this,event)'>

<script>
   function myFunc(Sender,e){
     var key = e.which ? e.which : e.keyCode;

     if(key == someKey){ // cancel event and do something
        ev.returnValue = false;
        if(e.preventDefault) e.preventDefault();
        return false;
     }
   }
</script>

OPPDATERING prøv og test dette med jQuery

$(document).ready(function(){
$('#in').keydown(fn);
});

var cnt = 0;
function fn(e){
   var key = e.keyCode ? e.keyCode : e.which;
   cnt++;

   if(cnt == 10) {
  alert('event was fired 10 times. Last time with key: '+key);
      cnt = 0;
   }
}

Svar #2

DOM 3 Events-spesifikasjonen inkluderer tastaturhendelser, men den er fortsatt et arbeidsutkast, så den er sannsynligvis ikke så vidt støttet ennå, men bør være ganske nyttig.

For å omgjøre tastkoder til tegn, kan du finne Quriskmode nyttig. Å vite hvilken tast som ble trykket og hvilke modifikatorer som ble brukt bør ta deg dit du ønsker å være. Merk at du kan få problemer med å kartlegge alle tastaturer til de samme tegnsettene fordi noen har taster som andre ikke har (f.eks. Microsoft 'Windows'-tast og Apple Command-tast). Litt prøving og feiling kan være nødvendig.

Å, og du kan finne artikkelen JavaScript Madness: Keyboard Events interessant.