2010-02-15 10 views
5
<script type="text/javascript" src="jquery-1.3.2.js"></script> 
<input id=a type="text" value='sss'/> 
<script type="text/javascript"> 
    $('#a').keyup(
    function(event){ 
    alert(String.fromCharCode(event.which)) 
    }) 
</script> 

puede probar este código en tu Brower,¿Por qué siempre UpperCase en mi código?

y siempre alerta en mayúsculas de un charCode.

Respuesta

9

Al principio pensé que se trataba de un error, ya que se devuelve el valor en minúsculas espera para el evento keypress. Resulta que en keyup/keydown siempre se devuelve la versión mayúscula ASCII/no desplazada de una llave.

Desde este enlace: http://www.javascriptkit.com/jsref/eventkeyboardmouse.shtml

Tenga cuidado cuando se accede a la propiedad keyCode durante un evento onkeyup onkeydown o , ya que se encuentra cada vez se pulsa cualquier tecla, incluyendo teclas no de carácter como "Shift ". Este significa que si intenta presionar "Mayús + a" para intente obtener el código de clave para "A", siempre obtendrá dos códigos de clave , uno para "Mayúsculas" y para "A" en ese orden Lo que no conseguirá independientemente es el código clave de "a", como keyCode siempre devuelve el valor Unicode de la versión en mayúsculas de carácter

  • pulsar Shift + a cuenta como una evento único keypress.
  • pulsar Shift + a cuenta como dos keydown eventos cuando se pulsan las teclas hacia abajo y dos keyup evento cuando se sueltan las teclas.
  • keypress devuelve valor compuesto de de una o más teclas presionadas al unísono.
  • keydown y keyup devuelva el valor de una sola clave ignorando las combinaciones de teclas.

Ahora aquí es la parte confusa: por alguna razón el valor de la clave no desplazada a se devuelve como código de la llave 65. Pero 65 es una mayúscula en la tabla ASCII. Así que en algún momento el navegador está tomando la minúscula (código ASCII 97), transformándolo a mayúsculas A, después de pasarlo keydown/keyup como el personaje no desplazada. Extraño, ¿no es así?

+0

No estoy seguro si me gustaría llamar el comportamiento "raro", es sólo una convención. https://developer.mozilla.org/en/DOM/event.charCode toma nota de que el caso no es respetado por 'eventos keyCode'. Un 'keyCode' le indica qué tecla * se presionó, no el carácter que resulta de ella. Y como todas las letras están impresas en mayúscula en prácticamente todos los teclados, parece tener sentido usar la variante en mayúscula. Buena respuesta de lo contrario. :) – deceze

1

(conjetura)

Se hace referencia a la Llave que no tiene un caso. El caso está determinado por si la tecla de mayúsculas está o no bajada.

Cuestiones relacionadas