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

时间:2009-06-25 13:26:26

标签: javascript internet-explorer dom javascript-events cross-browser

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

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

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

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

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

1 个答案:

答案 0 :(得分:7)

您需要将onkeydown用于非字符键。 IE中的onkeypress只处理返回字符串的键。

具体引用MSDN文档:

  

自Microsoft Internet Explorer 4.0起,   onkeypress事件可能会发生   取消以下键:

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