为什么在某些浏览器中输入字段的onkeypress处理程序没有收到箭头键,选项卡等?

Mar*_*ouf 2 javascript internet-explorer dom cross-browser dom-events

我正在构建一个专门用于输入和编辑时间的文本输入字段.功能的一部分要求各种方式关注时间的不同组成部分(小时,分钟,秒),我通过文本选择指出.使用鼠标可以直接选择,这很有效.另一个功能是键盘导航.

大多数此功能依赖于我能够处理keyPress事件,抑制默认行为并替换特殊操作的事实.

在Firefox中,我的工作很好.用户可以使用左/右箭头键或tab/shift-tab在部分时间之间移动(当它们到达结尾时,下一个tab键将离开该字段并正常聚焦下一个元素).

在Internet Explorer 7(可能是其他人?)中,按键处理程序甚至都没有接收到箭头键和选项卡.如果按下箭头键,则文本选择将丢失,光标将移动1.提供多个字段的效果消失,导致控制感破裂.Tab似乎也跳过了处理程序,只是立即翻转到下一个可聚焦元素.

拦截这些钥匙有什么技巧吗?

And*_*y E 7

您需要使用onkeydown作为非字符键.IE中的onkeypress只处理返回字符串的键.

要专门引用MSDN文档:

从Microsoft Internet Explorer 4.0开始,onkeypress事件将触发,可以取消以下键:

  • 字母:A - Z(大写和小写)
  • 数字:0 - 9
  • 符号:!@#$%^&*()_ - + = <[] {} ,. /?\ | ''"〜
  • 系统:ESC,SPACEBAR,ENTER