Keydown允许在iPhone上使用数字而不是移位符号

Exp*_*lls 5 html javascript jquery html5 ios

我有一个事件绑定到一个只允许数字的输入.简化:

function (e) {
    if (-1 === [48,49,50,51,52,53,54,55,56,57].indexOf(e.keyCode)) {
        e.preventDefault();
    }
}
Run Code Online (Sandbox Code Playgroud)

这工作得很好,但是如果有人类型!,@,#,$,等键代码仍然是一样的,并没有阻止事件的默认.

在物理键盘上,我可以通过检查来简单地防止这种情况e.shiftKey.但是,在iOS 虚拟键盘上,$即使是某些字符存在(例如)<input type=number>,也可以直接输入.他们的keyCode是一样的,但似乎e.shiftKey仍然是假的.

我可以接受各种可能的解决方案:

  • 让虚拟键盘本身显示这些字符(即只显示数字和句点/小数)
  • 检测到按下了无效的虚拟键并抑制了事件行为
  • 确定将无效字符添加到输入的值并在此情况下抑制事件行为
  • 其他?

m1.*_*m1. 0

您可以使用它<input type="tel" />来限制 iOS 中的数字输入 - 尽管这也允许输入“*”和“#”,但至少它的工作量更少,因为您只需要检查这两个字符