得到字符类型,跨浏览器

时间:2011-06-01 18:13:31

标签: javascript javascript-events

简单的问题 - 是否有人知道可靠的跨浏览器功能来从keydown事件中输入 字符 ?我可以从quirksmode网格中编写一个,但是不想重新发明轮子,因为它非常简单但非标准。

让我澄清一下:

仅使用event.keyCodeevent.which无法做到这一点。整体逻辑如下:

  • 获取密码
  • 检测shift,ctrl
  • 如果是ctrl,请忽略
  • 使用和不使用shift键创建键码的映射
    • 示例地图{186 : ';', 187 : '=', 188 : ',', ....}
    • 需要一个单独的Shift键修改器地图
    • 地图需要根据浏览器(特别是具有60,000个密钥代码的Safari Mac)进行更改
  • 如果keycode在map中,则返回映射密钥
  • 如果键码不在地图中,标准化数字,必要时应用shift修饰键,返回String.fromCharCode(key)

这不是一个简单的解决方案,这就是为什么我正在寻找一个预先制作的解决方案:)

2 个答案:

答案 0 :(得分:4)

你愿意使用jQuery吗?

$("input").bind("keydown",function(e){ var value = this.value + String.fromCharCode(e.keyCode); }

我相信切换到按键事件可以解决您评论中提到的问题。以下代码是否符合您的要求?

$("input").bind("keypress",function(e){ var value = this.value + String.fromCharCode(e.keyCode); }

答案 1 :(得分:3)

多年来我一直在想同样的事情。最近我厌倦了查找我写了一个名为keysight的模块的事件的密钥代码,该模块分别将keypresskeydownkeyup事件转换为字符和键。

示例:

 element.addEventListener("keydown", function(event) {
    var character = keysight(event).char
 })

它不会忽略ctrl上的任何内容,因此如果需要,您必须手动执行此操作。但它完成了你给出的所有其他逻辑。