Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Knockout.js验证失败,类型为;“数字”;输入字段_Javascript_Knockout.js_Knockout Validation - Fatal编程技术网

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})
 ...