Javascript 在iPhone上允许数字但不允许移动符号的向下键

Javascript 在iPhone上允许数字但不允许移动符号的向下键,javascript,jquery,ios,html,Javascript,Jquery,Ios,Html,我有一个事件绑定到一个只允许数字的输入。简化: function (e) { if (-1 === [48,49,50,51,52,53,54,55,56,57].indexOf(e.keyCode)) { e.preventDefault(); } } 这很好,但如果有人键入!、@、#、$,等。键代码仍然相同,并且不会阻止事件默认值 在物理键盘上,我可以通过检查e.shiftKey来防止这种情况。但是,在iOS虚拟键盘上,即使对于,也存在一些字符(例如$),可

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

function (e) {
    if (-1 === [48,49,50,51,52,53,54,55,56,57].indexOf(e.keyCode)) {
        e.preventDefault();
    }
}
这很好,但如果有人键入!、@、#、$,等。键代码仍然相同,并且不会阻止事件默认值

在物理键盘上,我可以通过检查
e.shiftKey
来防止这种情况。但是,在iOS虚拟键盘上,即使对于
,也存在一些字符(例如
$
),可以直接键入这些字符。他们的键码是相同的,但似乎
e.shiftKey
仍然是错误的

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

  • 使虚拟键盘本身不显示这些字符(即仅显示数字和句点/小数)
  • 检测是否按下了无效的虚拟键并抑制事件行为
  • 确定将向输入值中添加无效字符的时间,并在这种情况下抑制事件行为
  • 其他人

您可以使用
将输入限制为iOS中的数字——尽管这也允许键入“*”和“#”,但至少工作量较小,因为您只需检查这两个字符

检查最后一个字符是否错误并删除。不需要违约。