2013-11-27 110 views
0

是否存在一些JavaScript/jQuery腳本可將ASCII碼轉換爲由keypress,keyup和​​dom事件返回的keyCodeASCII到鍵碼轉換器

我想是這樣的:

"A".toKeycode 

編輯:我問是否有人在做了一些腳本,所有的ASCII字符轉換爲正確的鍵碼。所以" ".toKeycode也應該工作。

+0

http://www.w3schools.com/jsref/jsref_charcodeat。asp – Andy

+0

@Andy但是使用這個我需要使用:'「a」.charCodeAt(0) - 32'但是'「」.charCodeAt(0)' – 90intuition

+0

你是在談論通過keyup,keydown和keypress事件返回的鍵碼嗎?請澄清你的問題 –

回答

3

根據我的經驗String.fromCharCode(e.keyCode)是不可靠的。 String.fromCharCode需要unicode charcodes作爲參數; e.keyCode返回javascript鍵碼。 Javascript鍵碼和unicode charcodes不是一回事!特別是,鍵盤按鍵返回與普通數字按鍵不同的按鍵代碼(因爲它們是不同的按鍵),同時返回大寫和小寫字母相同的按鍵代碼(在兩種情況下您都按下相同的按鍵),儘管它們具有不同的字符代碼。

例如,普通的數字鍵1生成與鍵碼49事件,而數字小鍵1(與numlock的上)生成鍵碼97與String.fromCharCode使用我們得到如下:

String.fromCharCode(49)返回「1」 String.fromCharCode(97)返回「a」 String.fromCharCode需要unicode charcodes,而不是javascript keycodes。該鍵生成一個鍵碼爲65的事件,與它將生成的字符的情況無關(在事件中,如果按下shift鍵等,還有一個修飾符)。字符「a」具有61的unicode charcode,而字符「A」具有41的charcode(根據例如http://www.utf8-chartable.de)。然而,那些是十六進制值,轉換爲十進制給我們一個65代表「A」和97代表「a」的charcode。 1這與我們從String.fromCharCode獲得的這些值一致。

我自己的要求僅限於處理數字和普通字母(接受或拒絕取決於字符串中的位置)並讓控制字符(F鍵,ctrl-something)通過。因此,我可以檢查控制字符,如果它不是一個控制字符,我檢查一個範圍,然後才需要獲取實際字符。鑑於我並不擔心大小寫(我將所有字母都改爲大寫),並且已經限制了鍵碼的範圍,所以我只需要擔心鍵盤按鍵。對於以下就足夠了:

String.fromCharCode((96 < =鍵& &鍵< = 105)鍵-48:鍵) 更一般地,功能可靠地返回來自則charCode字符將是巨大的(也許作爲一個jQuery插件),但我現在沒有時間寫它。抱歉。

我還會提到e.which(如果您使用的是jQuery),它會對e.keyCode和e.charCode進行標準化,這樣您就不必擔心按下了哪種按鍵。與String.fromCharCode相結合的問題依然存在。

1我很困惑了一會兒。所有的文檔都說String.fromCharCode需要一個unicode charcode,而實際上它似乎適用於ASCII字符碼,但那是我認爲由於需要從十六進制轉換爲十進制,加上ASCII字符碼和unicode十進制字符重疊的事實對於普通的拉丁字母。