【发布时间】:2016-09-20 07:33:19
【问题描述】:
我正在尝试为只接受数字和加号 (+) 的电话号码构建自定义文本输入;所有其他字符都需要被丢弃,并且不会显示在该字段上。
我正在尝试使用事件处理程序(onkeydown/onkeypress)并丢弃与其他键对应的输入。但是,我想不出一种跨浏览器的方法来做到这一点。以下是我尝试过但不起作用的方法:
使用 onkeypress 事件并查看 event.key 来确定按下了哪个键:在 Chrome 上不起作用(请参阅 http://caniuse.com/keyboardevent-key)。有没有跨浏览器的解决方法?
使用 onkeycode 事件并查看 event.keyCode: 当我们需要按多个键来打印一个字符时(例如,英文键盘布局需要按 Shift 和= 给 +)。此外,它还允许出现诸如 !@#$%^&*() 之类的字符,因为这些字符在按下 Shift 和数字时出现。 (这是JavaScript keycode allow number and plus symbol only 中采用的方法,但对我没有多大帮助;))
使用 HTML 模式属性:这似乎并没有真正阻止人们写出他们喜欢的任何东西。
谢谢!
【问题讨论】:
-
您可以使用 onkeyup 事件,获取整个输入并使用正则表达式过滤掉任何不需要的字符
-
@evolutionxbox 不,它不是重复的。该链接中遵循的方法正是我尝试过但不起作用的方法之一。第一篇文章第二个要点解释了它不起作用的原因。
-
该方法可能行不通,但问题本质上是一样的。这使它成为重复项。无论如何,@RobinvdA 建议的方法很可能是您想要的。
-
@RobinvdA 如果您正在对输入值进行正则表达式并对其进行清理,则除非您知道保持光标位置的跨浏览器方式,否则光标将被强制到文本框的末尾。我遇到了很多令人愤怒的界面,它们不必要地执行该操作并阻止我在文本中间修复某些内容。
标签: javascript html validation user-input