Experiment with this page to learn about Key events in different browsers.
I ran a few tests, all on WinXP...
* Opera 8.0 *
onkeydown and onkeyup:
- alpha, shift and special (f-keys and arrows) keys give the same values in both
'keyCode' and 'which', and alpha values are forced to uppercase.
onkeypress:
- alpha keys give values in both 'keyCode' and 'which' (case not forced).
- shift keys give a value in both 'keyCode' and 'which' and
they also change the case of alphas.
- special keys give values in 'keyCode' and 'which' is zero.
* Firefox 1.0.2 *
onkeydown and onkeyup:
- alpha, shift and special keys give the same values in both
'keyCode' and 'which', and alpha values are forced to uppercase.
onkeypress:
- alpha keys give values in 'which' (case not forced)
and 'keyCode' is zero.
- shift keys do not give a value in 'keyCode' nor 'which' but
they do change the case of alphas.
- special keys give values in 'keyCode' and 'which' is zero.
* IE 6.0 *
onkeydown and onkeyup:
- alpha, shift and special keys give values in 'keyCode',
'which' is undefined, and alpha values are forced to uppercase.
onkeypress:
- alpha keys give values in 'keyCode' (case not forced).
- shift keys do not give a value in 'keyCode' but
they do change the case of alphas.
- special keys do not give a value in 'keyCode'.
'which' is also used for mouse events (classic NN values: 1/2/3 - left/middle/right).
Firefox also supports 'button' ('standard' values: 0/1/2).
Opera 8 does the same as Firefox with mousedown but doesn't allow the right-click value.
In early versions of O7 they used non-standard and non-IE values (1/3/2).
IE uses 'button' (but not with onclick) with classic IE values: 1/4/2.