Keydown允许数字,但不能在iPhone上移动符号
我有一个事件绑定到应该只允许数字的input。 简化:
function (e) { if (-1 === [48,49,50,51,52,53,54,55,56,57].indexOf(e.keyCode)) { e.preventDefault(); } }
这工作正常,但如果有人types! , @ , # , $等等,keyCode仍然是一样的,事件的默认是不被阻止的。
在物理键盘上,我也可以通过检查e.shiftKey
来防止这e.shiftKey
。 但是,在iOS 虚拟键盘上,即使是<input type=number>
也存在一些字符(如$
),并且可以直接键入。 他们的keyCode是一样的,但似乎e.shiftKey
仍然是错误的。
我可以接受的解决scheme有很多种:
- 让虚拟键盘本身不显示这些字符(即只显示数字和句点/小数)
- 检测到一个无效的虚拟键被按下,并抑制事件的行为
- 确定一个无效字符将被添加到input的值,并在这种情况下抑制事件的行为
- 其他?
你可以使用<input type="tel" />
将input限制为iOS中的数字,尽pipe这也允许input“*”和“#”,至less这样做是因为你只需要检查对于这两个字符