我有一个事件绑定(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/