我有两个文本框,它们与Datepicker绑定处理程序绑定,以便在单击文本框(DD / MM / YYYY)时显示一个日期选择器。
我的两个文本框是From
和To
文本框。顾名思义,我希望验证工作如To
日期总是大于From
。
我尝试使用谷歌搜索,但遗憾的是我的努力还不足以获取正确的信息。
坦率地说,我已经使用jquery进行了这种验证,并进行了分割,比较了有点循环和复杂,最重要的是它不是淘汰方式。
我正在尝试以KnockOut的方式做事,任何建议都值得赞赏。
更新:我正在尝试这样的事情
self.Validation = ko.validatedObservable([
self.ToDate.extend({
validation: {
validator: function (val, someOtherVal) {
Date.parse(val) > Date.parse(someOtherVal());
var date1 = val.split('/'); var date2 = someOtherVal().split('/');
var TDate = new Date(date1[2], date1[1], date1[0]); var FDate = new Date(date1[2], date1[1], date1[0]);
if (Date.parse(Tdate) > Date.parse(FDate))
{ return true; } else { return false; }
},
message: 'Must be greater than FromDate',
params: self.FromDate
}
})
]);
好的代码看起来很乱。如果我有空val
ToDate
,那么我在OnLoad上遇到上述代码时遇到的一个问题。我在split
收到错误,这是正确的。有什么办法可以限制这个错误。
答案 0 :(得分:1)
将您的输入绑定到/从值绑定到计算读/写可观察对象,这些可观察对象正在写入视图模型中的私有可观察对象。
self._StartTime = ko.observable();
self.StartTime = ko.computed({
read: function () { return self._StartTime(); },
write: function (newStartTime) {
if (!newStartTime) {
self._StartTime(null);
self._EndTime(null);
return;
}
// other code here
}
});
对您的结束时间执行相同操作,并且当您从任一输入字段读取/写入时,您可以访问计算区域中的两个参数...
答案 1 :(得分:1)
利用时刻,你可以很容易地做到这一点
ko.validation.rules['dateGreaterThen'] = {
validator: function (val, otherVal) {
var d1 = moment(val, 'yy/mm/dd');
var d2 = moment(otherVal(), 'yy/mm/dd');
return d1 >= d2
},
message: function (val) {
var date = moment(val()).format('yy/mm/dd')
return 'The date must be greater then or equal to ' + date
}
};
ko.validation.registerExtenders();