我有一个包含此输入字段的表单:
<input type="number" name="price" data-bind="price">
这个淘汰赛验证定义:
...
price = ko.observable().extend({required: true, number: true})
...
问题在于,当我输入非数字值时,浏览器实际上将type="number"
字段的值设置为空字符串(内部),以便模型接收空字符串。因此,即使用户在字段中看到值,淘汰验证机制也始终触发“必需”验证。最好触发“请输入数字”消息,而不是“此字段是必需的”消息。
我当然可以使用type="text"
,但会在移动设备上触发错误的键盘。任何想法如何解决这个问题?
这当然与此问题有关:HTML5 input type=number value is empty in Webkit if has spaces or non-numeric characters?,但不幸的是,使用type =“tel”不是我的选择。
答案 0 :(得分:1)
这很尴尬,因为当this问题的答案显露出来时,浏览器不会公开HTML5数字输入的“原始”文本值,并且在两者都无效的情况下返回空字符串作为元素值和null输入。因此,您无法可靠地区分非数字值和缺失值 - 这最终是您的错误消息所需要的。
你甚至无法嗅探按键,看看用户是否输入了无效字符,因为你不知道用户是否复制/粘贴了无效内容。
在过去,我编写了自定义绑定,可以创建文本输入并将其强制转换为数字,但是这些限制会带来一些限制,比如你承认错误的移动键盘。
令人失望,但我想不出解决这个问题的方法。