如何在IE8及更低版本浏览器中获取按下按键的对应字符?
获取IE8中按下按键对应的字符
在IE8里,keydown事件确实没法直接拿到按下的字符——因为这个事件的设计是监听物理按键的按下动作,而非实际输入的字符。你在控制台看不到字符相关属性也很正常,因为keydown的keyCode对应的是按键的物理编码(比如大小写A的keyCode都是65),不是字符的ASCII码。
要解决这个问题,你需要切换到监听keypress事件,这个事件是在字符实际被输入时触发的,IE8里它的keyCode(或which)就是字符的ASCII编码,再通过String.fromCharCode()就能转成对应的字符了。
兼容IE8的实现代码
document.onkeypress = function(event) { // 兼容IE8的事件对象获取 event = event || window.event; // 获取字符编码(兼容不同浏览器的属性) var charCode = event.keyCode || event.which; // 转成对应的字符 var pressedChar = String.fromCharCode(charCode); console.log('按下的字符:', pressedChar); console.log('字符编码:', charCode); };
额外说明
- 区分keydown和keypress:如果需要捕获功能键(比如Ctrl、Shift、F1这类不会产生字符的按键),还是得用
keydown;但如果只需要获取输入的字符,keypress是更合适的选择。 - 特殊字符处理:像Enter键(编码13)、Tab键(编码9)这类按键,转出来的字符是控制字符,你可以根据需求做判断过滤:
if (charCode >= 32 && charCode <= 126) { // 只处理可打印字符 console.log('可打印字符:', pressedChar); } - 大小写区分:
keypress的编码会区分大小写(比如小写a是97,大写A是65),这和keydown返回的物理键码不同,刚好符合你获取实际输入字符的需求。
内容的提问来源于stack exchange,提问作者Oleksii Binetskyi
相关产品推荐
相关产品推荐

