Firefox、Chrome和Safari的event对象都支持一个charCode属性,这个属性只有在反生keypress事件时才包含值,而且这个值是按下的那个键所代表字符的ASCII编码。此时的keyCode通常等于0或者也可能等于所按键的键码。IE和Opera则是在keyCode中保存字符的ASCII编码。要想跨浏览器的方式取得字符编码,必须首先检测charCode属性是否可用,如果不可用则使用keyCode,如下面的例子所示:
var EventUtil = { getEvent: function (event) { return event ? event : window.event; }, addHandler: function (element, type, handler) { if (element.addEventListener) { element.addEventListener(type, handler, false); } else if (element.attachEvent) { element.attachEvent("on" + type, handler); } else { element["on" + type] = handler; } }, getCharCode: function (event) { if (typeof event.charCode == "number") { return event.charCode; } else { return event.keyCode; } } }; var textbox = document.getElementById("myText"); EventUtil.addHandler(textbox, "keypress", function (event) { event = EventUtil.getEvent(event); alert(EventUtil.getCharCode(event)); });
这个方法首先检测charCode属性是否包含数值(在不支持这个属性的浏览器中,值为undefined),如果是,则返回该值。否则,就返回keyCode属性值。
在取得了字符编码之后,就可以使用String.fromCharCode()将其转换成实际的字符。