下拉列表中的Knockout Validation始终显示错误消息

时间:2014-05-02 18:28:11

标签: javascript knockout.js knockout-2.0 knockout-validation

将值绑定到下拉列表并使用挖空验证时,即使我的挖空验证设置显示messagesOnModified: true,也会始终显示错误消息。

HTML

<input type="text" data-bind="value: Name" />
<br />
<select data-bind="value: State">
    <option value="">Select a state...</option>
    <option value="NY">New York</option>
    <option value="NJ">New Jersey</option>
</select>

JS

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

    self.Name = ko.observable().extend({
        required: { message: "You must enter a name." }
    });
    self.State = ko.observable().extend({
        required: { message: "You must select a state." }
    });

    self.Errors = ko.validation.group(self);
}

ko.validation.configure({
    messagesOnModified: true,
    insertMessages: true
});

ko.applyBindings(new ViewModel(), document.body);

并且jsfiddle显示文本框和下拉列表之间的区别:http://jsfiddle.net/f7v4m/

文本框显示正确的行为,错误消息仅在修改值后显示。

为什么显示下拉列表的错误消息?

1 个答案:

答案 0 :(得分:12)

删除&#34; initlial&#34;您需要使用空字符串初始化State属性的验证消息:

self.State = ko.observable("").extend({
    required: { message: "You must select a state." }
});

演示JSFiddle

您需要执行此操作,因为在编写ko.observable()时,它将使用undefined进行初始化,但是当knockout评估value绑定时,它会将State设置为当前选定的空选项值是一个空字符串。

然而,undefined不等于空字符串,它会使你的财产“#34;脏&#34;并且它会触发验证消息,因为验证插件认为您的属性已被修改。