javascript - Keydown 允许数字但不能在 iPhone 上换档符号

标签 javascript jquery ios html

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

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 中的数字——尽管这也允许输入“*”和“#”,但至少工作量较小,因为您只需检查这两个字符

关于javascript - Keydown 允许数字但不能在 iPhone 上换档符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19964074/

相关文章:

javascript - Google Apps 脚本如何链接到 Google 云端硬盘上的 JS 或 CSS 文件

javascript - DOM 加载后如果 body hasClass

jquery rebind() 在特定时间禁用事件,然后重新绑定(bind)它们

jquery - 我可以在灯箱中放置灯箱或图像贴图吗?

ios - Swift 4.2 使用 UICollectionViewCell 添加/删除按钮

javascript - JQuery使元素重复闪烁

javascript - 如何通过 JavaScript 在新浏览器窗口中仅打开外部链接?

javascript - 放大/缩小和旋转 div,平滑过渡

iphone - 为 iPhone 应用程序存储数据

ios - 与业务合作伙伴分享 iOs 应用程序演示