【问题标题】:Reliable html5 input type handling可靠的 html5 输入类型处理
【发布时间】:2016-12-05 13:44:37
【问题描述】:

我知道 html5 输入标签有一个 pattern 属性,但这有助于在用户输入值之后验证字段

这里的请求是prevent用户输入错误,而不是之后更正。我没有兴趣讨论它是否更好 - 这只是请求。

我也知道我可以为keyPress 事件添加一个事件侦听器并决定接受哪些字符。

但是我看到的所有示例都不是跨浏览器兼容的(我至少对桌面版和移动版的 FF、Chrome 感兴趣)并且它们失败了,因为用户可以输入“----”或“ ......”。

什么是可靠、健壮、跨浏览器的正则表达式模式以允许用户键入:

  • 任何数字 [0..9]
  • 只有一个小数点('.' 或 ',' 转换为第一个小数点)
  • 指定的小数位数(即小数点后的数字)
  • 可选的只有一个符号(“+”或“-”)作为第一个字符
  • 常用文本命令:箭头键、复制/剪切/粘贴、退格、删除、回车

最好不使用jQuery - 因为我应该只为这个目标添加它。

【问题讨论】:

  • 从 UX 经验来看,提供即时反馈解释错误比禁止他们输入错误内容并让他们试图找出为什么他们的角色不在屏幕上要好得多
  • 我理解,但正如我所写,设计 UI/UX 的人要求这种行为......
  • 作为开发人员,您应该将其推后,说这是一个可用性问题,您将在网站的该部分创建高跳出率 - 我知道如果它我会停止使用它在没有任何反馈的情况下阻止我打字
  • 好吧,无论如何,这有点跑题了:它不是“网站”,而是供同一公司的雇主使用的自定义 Web 应用程序。他们使用有 10 年历史的设备,这些设备具有一些像这样的“功能”。老板希望保持相同的 UX 以使过渡“透明”。我并不是说这是正确的方法。如果它在技术上可行,我不能拒绝说“我认为不同”......

标签: javascript regex html input


【解决方案1】:

“这里的请求是为了阻止用户”——不要那样做。

如果我在输入我的名字,但是在输入 i 时我的手指滑了,我也按了 8 键...没什么大不了的,我只是按退格键对吧?

嗯,你的想法是错误的。您的姓名输入将禁止数字,因此不会出现意外的 8,而退格键将删除 i

在您的问题中,您似乎正在寻找数字输入(您是否考虑过<input type="number" />?),因此在尝试输入 9 时,手指滑动可能适用于 *。无论您输入什么,都适用相同的想法。

始终允许用户键入他们想要的任何内容。当他们完成输入(元素的onchange或表单的onsubmit)时,然后你告诉他们“嘿,你输入的这个东西没有看起来是对的。”

因此,支持input[pattern]的浏览器提供的行为是正确的不应改变。

【讨论】:

  • 我可以同意 - 实际上我确实同意。但是你应该引用整句话:“我没有兴趣讨论它是否更好 - 这只是请求。”。这是一个设计约束,不是我做的……
  • @Mark 我知道,我也看到了。但在这种情况下,我觉得最好放下你的脚。如果必须,请使用我给出的确切示例。向施加此设计约束的人解释这是一个非常糟糕的主意。没有任何技术水平的设计师会提出这样的限制。我坚信,如果您实施请求的约束,您会惹恼很多用户。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-20
  • 2015-09-04
相关资源
最近更新 更多