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

,你可以在你的布勞爾測試此代碼,爲什麼總是在我的代碼中使用UpperCase?

,並時刻警惕一個則charCode大寫。

回答

9

起初我以爲這是一個錯誤,因爲keypress事件返回了預期的小寫值。事實證明,在keyup/keydown總是返回一個密鑰的ASCII大寫/無移位版本。

從這個鏈接:http://www.javascriptkit.com/jsref/eventkeyboardmouse.shtml

的onkeydown事件或 onkeyup事件期間訪問鍵代碼 屬性時要小心,因爲它被設置每當 按下任何按鍵,包括非 字符鍵,如「移」。這 意味着,如果你嘗試按「Shift + A」到 嘗試,並獲得「A」鍵代碼,你 會最終總是獲得兩個 鍵代碼代替,一個「移」和 一個「A」該訂單。你 不會得到無論是 「A」 鍵代碼 ,爲的keyCode總是返回 的大寫 版本的字符

  • 按Shift的Unicode值+一個計數作爲單個keypress事件。
  • 按下Shift + a時,按下鍵時會計爲兩個​​事件,而釋放鍵時會按兩個keyup事件。
  • keypress返回複合一個或多個鍵被同時按下的值。
  • ​​和keyup返回單鍵的值,同時忽略任何鍵組合。

現在這裏是令人困惑的部分:由於某種原因,a鍵的未移位值被作爲鍵碼65返回。但65是ASCII表中的大寫字母A.因此,瀏覽器沿着小寫字母a(ASCII碼97)將其轉換爲大寫字母A,然後將它作爲非移位字符傳遞給keydown/keyup。奇怪,不是嗎?

+0

不知道我是否會稱這種行爲「怪異」,這只是一種慣例。 https://developer.mozilla.org/en/DOM/event.charCode指出該案例不適用於'keyCode'事件。一個'keyCode'告訴你哪個*鍵被按下了,而不是由它產生的字符。而且,由於所有的字母幾乎在所有鍵盤上均以大寫字母打印,因此使用大寫字母變體似乎是有意義的。好的答案,否則。 :) – deceze

1

(猜測)

它引用重點不具備的情況下。案件由換檔鑰匙是否也關閉決定。

相關問題