Javascript Knockout.js验证失败,类型为;“数字”;输入字段
我有一个包含此输入字段的表单:Javascript Knockout.js验证失败,类型为;“数字”;输入字段,javascript,knockout.js,knockout-validation,Javascript,Knockout.js,Knockout Validation,我有一个包含此输入字段的表单: <input type="number" name="price" data-bind="price"> 问题是,当我输入非数值时,浏览器实际上会将type=“number”字段的值设置为空字符串(内部),因此模型会收到空字符串。因此,即使用户在字段中看到值,敲除验证机制始终会触发“必需”验证。最好触发“请输入一个数字”消息,而不是“此字段是必需的”消息 我当然可以使用type=“text”,但这会在移动设备上触发错误的键盘。有什么办法解决这个问题
<input type="number" name="price" data-bind="price">
问题是,当我输入非数值时,浏览器实际上会将type=“number”
字段的值设置为空字符串(内部),因此模型会收到空字符串。因此,即使用户在字段中看到值,敲除验证机制始终会触发“必需”验证。最好触发“请输入一个数字”消息,而不是“此字段是必需的”消息
我当然可以使用type=“text”
,但这会在移动设备上触发错误的键盘。有什么办法解决这个问题吗
这当然与此问题有关:,但不幸的是,使用a type=“tel”对我来说不是一个选项 这很尴尬,因为正如问题的答案所揭示的,浏览器不会公开HTML5数字输入的“原始”文本值,并且在无效和空输入的情况下返回空字符串作为元素值。因此,您无法可靠地区分非数字值和缺失值,这是错误消息传递的最终要求 您甚至无法嗅探按键,并查看用户是否以这种方式输入无效字符,因为您不知道用户是否复制/粘贴了无效内容 在过去,我编写了自定义绑定来创建文本输入并将其强制为数字,但正如您所承认的那样,这些绑定会有一些限制,比如调出错误的移动键盘
这很令人失望,但我想不出解决这个问题的办法。hi@koenpeters您不能创建自己的验证器并通过回调来显示适当的消息吗。我最终使用type=“text”和一个html5模式:'\d+([,.]\d{2}')。不是很好,但是已经足够满足我的需要了。我在cordova+knockout js上也遇到了类似的问题。你能帮助@koenpeters吗:
...
price = ko.observable().extend({required: true, number: true})
...