Cita: keyCode
For keyboard events, keyCode specifies the Unicode character code generated by the key that was struck.
Javascript: The Definitive Guide 4th edition
traduccion: para eventos del teclado,
keyCode indica el caracter Unicode generado por la tecla presionada.
no obstante yo pienso un tanto diferente. la tecla presionada no va necesariamente pareada con la representacion Unicode. en mi opinion, el numero que representa
keyCode va a la par de acuerdo al layout del teclado. de modo que ciertas teclas como CTRL, ALT, SHIFT, HOME, END, PAGE UP, PAGE DOWN, INSERT, DELETE, etc. representan caracteres que realmente no se han presionado en el teclado. y lo mismo sucede con los diferentes layouts que integra el teclado: QWERTY y NUMBER PAD. por ejemplo, la tecla '1' en el layout QWERTY y la tecla '1' en el layout NUMBER PAD representan diferentes unicode.
pienso que esa es la parte que confunde a las gentes. naturalmente pensamos que al tener dos o mas teclas con el mismo significado humano, entendemos que asi mismo lo interpreta el sistema. a continuacion un script que representa el valor de
keyCode y su representacion unicode cuando presionamos una tecla.
Código:
<head><script type="text/javascript">
document.onkeydown = function(evt){
evt = evt || event;
document.getElementById("keycode").innerHTML = evt.keyCode;
document.getElementById("unicode").innerHTML = String.fromCharCode(evt.keyCode);
evt.preventDefault? evt.preventDefault(): evt.returnValue = false;
}
</script>
<style type="text/css">
span{
font-family:monospace;
}
</style>
</head><body>
Keycode: <span id="keycode"> </span><br />
Unicode: <span id="unicode"> </span>
</body>
por tanto, la solucion en tu caso seria
Código:
if(tecla == 49 || tecla == 97){...}
if(tecla == 50 || tecla == 98){...}
if(tecla == 48 || tecla == 96){...}