我正在尝试验证一个时间字段是否大于另一个。时间由bootstrap-datetimepicker输入,并通过KO验证进行验证。
我的问题是,验证似乎发生在文本框上的自动更正之前。
如何在应用自动更正后进行验证?
代码:
var vm = function () {
var self = this;
self.startTime = ko.observable().extend({ required: true });
self.endTime = ko.observable()
.extend({
validation: {
validator: function (val) {
if (self.startTime() === '' || val === '') {
return true;
}
return new Date(val) > new Date(self.startTime());
},
message: 'Event must finish after it started'
}
});
(function () {
$('#event-start-time').datetimepicker({
pickDate: false
});
$('#event-end-time').datetimepicker({
pickDate: false
});
$('#event-end-time').on("change.dp", function (e) {
//I've tried with and without this
//self.endTime.valueHasMutated();
});
})();
};结果:

Fiddle
发布于 2015-03-04 04:56:17
可能有点晚了,但这是我开发的:
假设您将结束日期作为一个可观察对象,然后使用自定义的“dateBefore”验证
this.endDate = ko.observable(new Date().addHours(3).toGMTString()).extend({
required: true,
dateBefore: self.startDate()
});创建自定义验证:
ko.validation.rules['dateBefore'] = {
validator: function (val, otherVal) {
var d1 = new Date(val),
d2 = new Date(otherVal);
return d1 > d2;
},
message: 'The end date must be before the start date'
};
ko.validation.registerExtenders();如果您需要进一步的解释,请发表评论
https://stackoverflow.com/questions/21255554
复制相似问题