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这样做是因为你只需要检查对于这两个字符