挖空.js验证失败,输入字段 type= "number"



我有一个包含此输入字段的表单:

 <input type="number" name="price" data-bind="price">

而这个敲除验证定义:

 ...
 price = ko.observable().extend({required: true, number: true})
 ...

问题是,当我输入非数值时,浏览器实际上将type="number"字段的值设置为空字符串(内部),因此模型接收空字符串。因此,即使用户在字段中看到值,挖空验证机制也始终触发"必需"验证。最好触发"请输入数字"消息,而不是"此字段为必填字段"消息。

我当然可以使用type="text"但这会在移动设备上触发错误的键盘。有什么想法可以解决这个问题吗?

这当然与这个问题有关:如果 Webkit 中有空格或非数字字符,HTML5 输入类型=数字值为空?,但不幸的是,使用 type="tel" 对我来说不是一个选择。

这很尴尬,因为正如这个问题的答案所揭示的那样,浏览器不会公开HTML5数字输入的"原始"文本值,并且在无效和空输入的情况下返回一个空字符串作为元素值。因此,您无法可靠地区分非数字值和缺失值 - 这最终是错误消息所需要的。

甚至无法嗅探按键并查看用户是否以这种方式输入无效字符,因为您不知道用户是否复制/粘贴无效内容。

过去,我曾编写过创建自定义绑定来创建文本输入并强制使用数字,但正如您承认的那样,这些绑定将具有限制,例如调出错误的移动键盘。

这很令人失望,但我想不出这个问题的解决方案。

相关内容

最新更新