按键允许数字,但不允许在iPhone上移动符号

Keydown allowing numbers but not shift symbols on iPhone

本文关键字:不允许 iPhone 符号 移动 许数字 数字      更新时间:2023-09-26

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

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

这工作正常,但如果有人键入 @#$ 等,keyCode 仍然相同,并且不会阻止事件默认值。

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

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

  • 让虚拟键盘本身显示这些字符(即只显示数字和句点/小数)
  • 检测是否按下了无效的虚拟键并禁止事件行为
  • 确定将无效字符添加到输入的值中,并在这种情况下禁止事件行为
  • 别人?
您可以使用

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