Web開發時可能經常會用到在keyPress時獲得輸入的字元。String.fromCharCode()可以來實現這個,不過這個函數在你使用Shift鍵來輸入特殊字元時就不管用了,需要改造一下,這個文章給出了改造的方法,經測試在各種主流瀏覽器均正常。
<html><head><title >mapKeyPressToActualCharacter test</title><script language="javascript" type="text/javascript"> function onKeyPress() { var e = window.event || e; var keyCode = e.keyCode; if (keyCode == 8) { this.criteria.value = this.criteria.value.substring( 0, this.criteria.value.length - 1); } else { this.criteria.value += mapKeyPressToActualCharacter(event.shiftKey, keyCode); } } function mapKeyPressToActualCharacter(isShiftKey, characterCode) { if (characterCode === 27 || characterCode === 8 || characterCode === 9 || characterCode === 20 || characterCode === 16 || characterCode === 17 || characterCode === 91 || characterCode === 13 || characterCode === 92 || characterCode === 18) { return false; } if (typeof isShiftKey != "boolean" || typeof characterCode != "number") { return false; } var characterMap = []; characterMap[192] = "~"; characterMap[49] = "!"; characterMap[50] = "@"; characterMap[51] = "#"; characterMap[52] = "$"; characterMap[53] = "%"; characterMap[54] = "^"; characterMap[55] = "&"; characterMap[56] = "*"; characterMap[57] = "("; characterMap[48] = ")"; characterMap[109] = "_"; characterMap[107] = "+"; characterMap[219] = "{"; characterMap[221] = "}"; characterMap[220] = "|"; characterMap[59] = ":"; characterMap[222] = "\""; characterMap[188] = "<"; characterMap[190] = ">"; characterMap[191] = "?"; characterMap[32] = " "; var character = ""; if (isShiftKey) { if (characterCode >= 65 && characterCode <= 90) { character = String.fromCharCode(characterCode); } else { character = characterMap[characterCode]; } } else { if (characterCode >= 65 && characterCode <= 90) { character = String.fromCharCode(characterCode).toLowerCase(); } else { character = String.fromCharCode(characterCode); } } return character; } </script> </head><body> <input name="test" type="text" onkeypress="onKeyPress();"/></body></html>
測試結果,在Firefox, Chrome and IE.和Safari下均通過: