Javascript 为什么输入字段未接收到箭头键、制表符等';某些浏览器中的onkeypress处理程序?

Javascript 为什么输入字段未接收到箭头键、制表符等';某些浏览器中的onkeypress处理程序?,javascript,internet-explorer,dom,cross-browser,dom-events,Javascript,Internet Explorer,Dom,Cross Browser,Dom Events,我正在构建一个文本输入字段,专门用于输入和编辑时间。该功能的一个部分要求以各种方式关注时间的不同组成部分(小时、分钟、秒),我通过文本选择来表示。直接选择是可以用鼠标,这是伟大的工作。另一个功能是键盘导航 大多数功能依赖于这样一个事实,即我能够处理按键事件、抑制默认行为并替换特殊操作 在Firefox中,我可以很好地实现这一点。用户可以使用左/右箭头键或tab/shift tab键在部分时间之间移动(当它们到达终点时,下一个tab键将离开字段并正常聚焦下一个元素) 在Internet Explo

我正在构建一个文本输入字段,专门用于输入和编辑时间。该功能的一个部分要求以各种方式关注时间的不同组成部分(小时、分钟、秒),我通过文本选择来表示。直接选择是可以用鼠标,这是伟大的工作。另一个功能是键盘导航

大多数功能依赖于这样一个事实,即我能够处理按键事件、抑制默认行为并替换特殊操作

在Firefox中,我可以很好地实现这一点。用户可以使用左/右箭头键或tab/shift tab键在部分时间之间移动(当它们到达终点时,下一个tab键将离开字段并正常聚焦下一个元素)

在Internet Explorer 7(可能是其他浏览器?)中,按键处理程序甚至不会接收到箭头键和tab键。如果按箭头键,文本选择将丢失,光标将移动1。提供多个字段的效果消失,导致控制感觉中断。Tab似乎也跳过了处理程序,直接切换到下一个可聚焦元素


拦截这些密钥有什么诀窍吗

对于非字符键,需要使用onkeydown。IE中的onkeypress仅处理返回字符串的键

具体引用MSDN文档:

从Microsoft Internet Explorer 4.0开始, onkeypress事件激发并可以 已取消以下键的设置:

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

我应该补充一点,我正在Linux上托管的VMware中测试IE7。我也找到了这个参考:我的第一次尝试并没有针对特殊键启动onkeydown或onkeyup。我会继续使用它。特殊(CTRL、SHIFT、ALT、F1-F9等)按键按向上/向下键对我来说很好,在IE中,我设置了一个页面,可以检测按键并将按键代码输出到输入框,这比试图记住或查找按键要容易得多。