2010-02-15 5 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> 

vous pouvez tester ce code dans votre Brower,Pourquoi toujours UpperCase dans mon code?

et UpperCase toujours en alerte d'un charcode.

Répondre

9

Au début, j'ai pensé que c'était un bug, car la valeur minuscule attendue est retournée pour l'événement keypress. Il s'avère que sur keyup/keydown la version ASCII majuscule/non-décalée d'une clé est toujours retournée.

A partir de ce lien: http://www.javascriptkit.com/jsref/eventkeyboardmouse.shtml

Attention lorsque vous accédez à la propriété codeTouche lors d'une onkeydown ou événement onkeyup, comme il est défini chaque fois une touche est enfoncée, y compris les non touches de caractères comme « Shift ". Ce signifie que si vous essayez d'appuyer sur « Shift + a » à essayer d'obtenir le code d'activation pour « A », vous aurez toujours finir par avoir deux keycodes à la place, un pour « Shift » et un pour « A » cet ordre. Ce que vous n'obtiendrez quel que soit le codeTouche pour « un », comme codeTouche retourne toujours la valeur unicode de la version majuscule d'un caractère

  • En appuyant sur Maj + un compte comme une événement unique keypress.
  • Appuyer sur Maj + a compte comme deux événements keydown lorsque les touches sont enfoncées et deux événements keyup lorsque les touches sont relâchées.
  • keypress Renvoie le composite valeur d'une ou plusieurs clés en cours de compression.
  • keydown et keyup renvoient la valeur d'une clé unique en ignorant les combinaisons de touches.

Maintenant, voici la partie déroutante: pour une raison quelconque la valeur de la clé non déplacée a est retourné comme code clé 65. Mais 65 est majuscule dans la table ASCII. Donc quelque part le long de la ligne le navigateur prend les minuscules a (code ASCII 97), en les transformant en majuscule A, puis en lui passant keydown/keyup comme caractère non décalé. Bizarre, n'est-ce pas?

+0

Je ne sais pas si j'appellerais le comportement "bizarre", c'est juste une convention. https://developer.mozilla.org/en/DOM/event.charCode note que le cas n'est pas respecté pour les événements 'keyCode'. Un 'keyCode' vous indique quelle touche * a été pressée, pas le caractère qui en résulte. Et puisque toutes les lettres sont imprimées en majuscules sur pratiquement tous les claviers, il semble logique d'utiliser la variante majuscule. Belle réponse autrement. :) – deceze

1

(estimation)

Il est la référence Key qui ne dispose pas d'un cas. Le cas est déterminé par le fait que la touche Maj est également désactivée.

Questions connexes