5

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

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

这很好用,但如果有人键入!@#$等,keyCode 仍然相同,并且不会阻止事件默认值。

在物理键盘上,我可以通过检查e.shiftKey. 但是,在 iOS虚拟键盘上,其中一些字符甚至存在(例如$) for<input type=number>并且可以直接键入。他们的keyCode是一样的,但看起来e.shiftKey还是假的。

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

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

1 回答 1

0

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

于 2013-11-14T21:08:05.817 回答