Knockout.js验证失败,输入字段为type =“number”

时间:2015-04-27 09:19:31

标签: javascript knockout.js knockout-validation

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

 <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”不是我的选择。

1 个答案:

答案 0 :(得分:1)

这很尴尬,因为当this问题的答案显露出来时,浏览器不会公开HTML5数字输入的“原始”文本值,并且在两者都无效的情况下返回空字符串作为元素值和null输入。因此,您无法可靠地区分非数字值和缺失值 - 这最终是您的错误消息所需要的。

你甚至无法嗅探按键,看看用户是否输入了无效字符,因为你不知道用户是否复制/粘贴了无效内容。

在过去,我编写了自定义绑定,可以创建文本输入并将其强制转换为数字,但是这些限制会带来一些限制,比如你承认错误的移动键盘。

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