我正在构建一个专门用于输入和编辑时间的文本输入字段。该功能的一部分要求通过各种方式来关注时间的不同组成部分(小时、分钟、秒),我通过文本选择来指示这些部分。可以用鼠标直接选择,效果很好。另一个功能是键盘导航。
大多数此功能都依赖于我能够处理 keyPress 事件、抑制默认行为并代之以特殊操作这一事实。
在 Firefox 中,我可以很好地工作。用户可以使用左/右箭头键或 tab/shift-tab 在部分时间之间移动(当他们到达终点时,下一个 tab 键将离开该字段并正常聚焦下一个元素)。
在 Internet Explorer 7(可能是其他版本?)中,箭头键和制表符甚至不会被按键处理程序接收。如果按下箭头键,则文本选择丢失,光标移动一位。提供多个字段的效果消失了,导致控制感觉被破坏。 Tab 似乎也跳过了处理程序并立即翻转到下一个可聚焦元素。
拦截这些 key 有什么技巧吗?
请您参考如下方法:
非字符键需要使用onkeydown。 IE 中的 onkeypress 仅处理返回字符串的键。
具体引用MSDN文档:
As of Microsoft Internet Explorer 4.0, the onkeypress event fires and can be canceled for the following keys:
- Letters: A - Z (uppercase and lowercase)
- Numerals: 0 - 9
- Symbols: ! @ # $ % ^ & * ( ) _ - + = < [ ] { } , . / ? \ | ' ` " ~
- System: ESC, SPACEBAR, ENTER