【问题标题】:Keydown allowing numbers but not shift symbols on iPhoneiPhone上的Keydown允许数字但不能移动符号
【发布时间】:2013-11-13 20:52:15
【问题描述】:

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

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好像还是假的。

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

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

【问题讨论】:

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

标签: javascript jquery ios html


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-29
    相关资源
    最近更新 更多