To pobieranie keyCode z window.event nie jest nawet konieczne, gdy używa się jQuery. Normalnie używa się tego żeby uwzględnić IE, które nie przekazuje poprawnego parametru do funkcji obsługi zdarzenia, tylko udostępnia informacje o zdarzeniu w globalnym obiekcie window.event. Ale jQuery uwzględnia to za nas i zapewnia nam parametr nawet w IE. jQuery zaleca też używać evt.which, a nie evt.keyCode (źródło: http://api.jquery.com/event.which/)/
Tym, co lubią przeklejać przykładowe rozwiązania zwrócę uwagę, że zawsze można (i powinno się) używać własnej mózgownicy. Np. jeśli obsługujemy naprawdę wiele klawiszy (4 strzałki + spacja to już pięć, a jest jeszcze "etc."), to żeby uniknąć powtórzeń można wprowadzić sobie zmienną $elementToFocus. Można też rozważyć użycie switcha, który ułatwi podstawianie kilku klawiszy do jednej funkcjonalności. To są kwestie zależne od konkretnego przypadku, których nie sposób uwzględnić pisząc komuś przykładowy szablon kodu. Natomiast prawie zawsze polecam używanie (pseudo)stałych dla określenia numerów klawiszy -- dla przejrzystości. Można je wyciągnąć poza funkcję obsługi zdarzenia, co zwiększyłoby nieco wydajność.
$(':input').keydown(function(evt)
{
var KEY_SPACE = 32,
KEY_LEFTARROW = ileśtam,
KEY_RIGHTARROW = szambernaście,
...
$currentElement = $(this)
$elementToFocus
;
switch (evt.which) {
case KEY_LEFTARROW:
$elementToFocus = $currentElement.next(':input');
break;
case KEY_RIGHTARROW:
$elementToFocus = $currentElement.prev(':input');
break;
case KEY_DOWNARROW:
case KEY_SPACE:
...
break;
...
// milion innych opcji
}
if ($elementToFocus) {
$elementToFocus.focus();
}
});
(ostrzegam, że też to pisałem z palca :P)