【发布时间】:2018-06-24 12:23:56
【问题描述】:
我知道以前有人问过这个问题,但我在这里看到的所有解决方案都有一些限制。
我想要实现的目标:我有一个输入字段,应该只允许输入或粘贴字母数字字符,总长度不得超过 N 个字符。它应该可以在移动浏览器中使用。
到目前为止我所尝试的:
- 输入 事件。仅在失去焦点时触发。
-
onkeypress 事件 (
return this.value.length < 8 && (event.keyCode >= 65 && event.keyCode <= 90 || event.keyCode >= 97 && event.keyCode <= 122 || event.keyCode >= 48 && event.keyCode <= 57))。不影响粘贴,并且由于某些奇怪的原因在 Android 版 Chrome 中根本不起作用。 - 模式属性。工作正常,但不会“即时”验证任何内容 - 所有验证都在提交表单时进行。
据我所知,这是一项典型的任务(支付表单上的 CVV 代码/卡号、电子商务中的订单号等),但所有解决方案都有一些缺点。似乎我错过了一些东西。请帮忙。
【问题讨论】:
-
像往常一样,使用
oninput事件而不是keyevents。input事件肯定会在输入元素的每次更改时触发,onchange仅在失去焦点时触发。 -
谢谢!但是如何限制
oninput事件中的字符集呢?我试过this.value = this.value.substring(0, 8).replace(/[^a-zA-Z0-9]/g, ''),但是当用户在中间插入一些东西时,光标会移动到输入控件的末尾。 -
好吧,您目前似乎正在做的是在每次输入更改时替换值,即使这不是必需的!为了防止光标移动到末尾,您可以做的是测试新文本是否违反某些条件(在这种情况下,如果它超过 8 个字符,或者它是否包含范围 az、AZ 和 0-9 以外的字符) 并且仅在这种情况下更新值。
-
如何防止
oninput事件中的值更新?
标签: javascript jquery html validation