crossbrowser pritisak tipke za posebne tipke (strelice,...) u JavaScriptu


Izrađujem sučelje preglednika za terminal. Trebam uhvatiti i pritiske znakova (alfanumeričkih, točka, kosa crta,...) i nepritiske znakova (strelice, F1-F12,...). Također, ako korisnik drži neku tipku pritisnutom, bilo bi dobro dobiti ponovljene pritiske tipki (funkcija bi trebala biti pozvana više puta dok se tipka ne pusti). Isto vrijedi za tipku razmaka, znakove,...

Želim da ovo bude što je moguće kompatibilnije s različitim preglednicima (jQuery keypress na tom planu ne uspijeva). Također sam pokušao koristiti fork jquery.hotkeys.js, ali ako dobro razumijem, ne mogu uhvatiti i posebne i znakove tipki u jednoj funkciji (za prve se treba koristiti keydown, a za druge također keydown).

Postoji li JS biblioteka koja bi mi omogućila hvatanje i znakova i posebnih tipki?

Nadam se da ne propuštam nešto očito. :)

AZURIRANJE Da pojasnim: tražim biblioteku koja bi mi sakrila detalje implementacije preglednika.

Odgovor #1

onkeydown je upravo ono što vam treba. Hvata sve tipke, čak i ako držite tipku, događaj se pokreće više puta.

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

AZURIRANJE pokušajte ovo isprobati i testirati s 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;
   }
}

Odgovor #2

Specifikacija DOM 3 Events uključuje ključne događaje, ali je još uvijek radna verzija pa vjerojatno još nije široko podržana, ali bi trebala biti prilično korisna.

Za pretvaranje kodova tipki u znakove, možda će vam Quriskmode biti koristan. Znanje koja je tipka pritisnuta i koji modifikatori se koriste trebalo bi vas dovesti tamo gdje želite. Imajte na umu da biste mogli imati problema s mapiranjem svih tipkovnica na iste skupove znakova jer neke imaju tipke koje druge nemaju (npr. Microsoft tipka "windows" i Apple tipka Command). Možda će biti potrebno malo pokušaja i pogrešaka.

Oh, i možda će vam članak JavaScript Ludilo: Tipkovnički događaji biti zanimljiv.