Knockout验证需要验证IE8

时间:2013-05-21 22:22:56

标签: knockout.js knockout-validation

我有一个使用knockoutjs和knockoutvalidation的简单表单。在兼容模式下运行IE时,我有以下行为。

需要一个字段。:

self.oldPassword = ko.observable().extend({ required: true});

加载页面时,我可以在调试模式下看到该消息为: 需要字段

但是,当我开始输入错误更改为: 请输入大于或等于true的值。

我迷失在这里,因为我想支持至少IE8。我在IE10,Chrome或FireFox中没有这个问题。而且我不想用淘汰模型和验证来重写我的所有javascript文件。

这个问题听起来很熟悉吗?有解决方案吗?

2 个答案:

答案 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文件不正确或奇怪。