PreventDefault non so cosa sia ...
Invece so che l'evento onkeyup lavora in modo simile in tutti i browser.
In realta` onkeypress scatta (in qualche browser) prima che il codice venga scritto nel buffer, per cui non serve per intercettare il tasto.
onkeydown scatta quando il tasto e` giu`, ma e` un evento "lungo" e potrebbe scattare piu` volte mentre il tasto e` premuto.
I tasti che hanno un corrispondente ASCII sono definiti completamente dentrogli 8 bit. Gli altri tasti generano due byte, e a seconda dei sistemi l'ordine dei byte puo` cambiare e anche il codice puo` essere diverso.
Per cui controlla la lettura di due byte (o meglio leggi e svuta tutto il buffer in tutte le situazioni).