1

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

必填字段。:

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

加载页面时,我可以在调试模式下看到消息是:Field is required

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

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

这个问题听起来很熟悉吗?有没有解决办法?

4

2 回答 2

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”始终为真。

因此,您在兼容模式下的 observable 将有 5 个额外的验证规则。幸运的是,这一切都与真正的 IE7/IE8 无关

于 2013-07-16T11:10:50.140 回答
0

我会扫描您的虚拟机以查找最小验证规则的任何实例,并确保未将其设置为 true。该错误消息特定于内置的 min 规则,如果您将该规则的参数设置为 true,它将吐出该错误消息。

我重新创建了以下问题:

var vm = function () {
    var self = this;

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

    self.oldPassword.extend({
        min: true
    });
}

如果您根本没有使用 min 规则,请确保敲除验证 js 文件不正确或奇怪。

于 2013-05-27T00:17:04.423 回答