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.
