我有一个使用knockoutjs和knockoutvalidation的简单表单。在兼容模式下运行IE时,我有以下行为。
需要一个字段。:
self.oldPassword = ko.observable().extend({ required: true});
加载页面时,我可以在调试模式下看到该消息为: 需要字段 。
但是,当我开始输入错误更改为: 请输入大于或等于true的值。
我迷失在这里,因为我想支持至少IE8。我在IE10,Chrome或FireFox中没有这个问题。而且我不想用淘汰模型和验证来重写我的所有javascript文件。
这个问题听起来很熟悉吗?有解决方案吗?
答案 0 :(得分:1)
Knockout验证检查是否已在您的observable绑定到的元素上指定了html-5验证属性,并添加了等效的验证规则。这是它检查的html-5验证属性列表:
var html5Attributes = ['required', 'pattern', 'min', 'max', 'step'];
对于每个人,它调用hasAttribute函数:
hasAttribute: function (node, attr) {
return node.getAttribute(attr) !== null;
}
在IE7 / IE8兼容模式下,如果找不到属性,node.getAttribute(attr)将返回空字符串,因此该表达式“node.getAttribute(attr)!== null”始终为true。
因此,您在兼容模式下的observable将有5个额外的验证规则。 幸运的是,所有这些都与真正的IE7 / IE8
无关答案 1 :(得分:0)
我会扫描你的vm以获取最小验证规则的任何实例,并确保未设置为true。该错误消息特定于内置最小规则,如果您为该规则将params设置为true,则会将该错误消息吐出。
我用以下内容重新创建了问题:
var vm = function () {
var self = this;
self.oldPassword = ko.observable().extend({ required: true });
self.oldPassword.extend({
min: true
});
}
如果您根本没有使用min规则,请确保敲除验证js文件不正确或奇怪。