将值绑定到下拉列表并使用挖空验证时,即使我的挖空验证设置显示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/
文本框显示正确的行为,错误消息仅在修改值后显示。
为什么显示下拉列表的错误消息?
答案 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;并且它会触发验证消息,因为验证插件认为您的属性已被修改。