【发布时间】:2015-10-18 01:02:33
【问题描述】:
是否可以将日期与 Knockout observables 和 jQuery Validation 进行比较?我有一个 StartDate 和一个 EndDate,都是可观察的。我想验证 EndDate 是否总是大于 StartDate。
我已经尝试过 addMethod 功能,但我似乎无法传入 self.StartDate。 addMethod 似乎不接受 KO observables,所以我必须传入字符串 ID“#StartDate”。
$.validator.addMethod("dateGreater", function(value, element, params){
var endDate = new Date(value); // this returns incorrect date.
var startDate = new Date($(params).val());
return this.optional(element) || startDate < endDate;
}, "The End Date must be greater thatn the Start Date.");
此代码的问题在于,当用户使用 DatePicker 选择日期时,EndDate 返回上一个日期,而不是当前选择的日期,并且由于 StartDate 不是一个正在验证的可观察对象,如果用户更改它,验证不会触发。
我想我的问题确实是,这可以通过 jQuery 验证来完成,还是应该使用 Knockout-validation?
我创建了一个简单的 jsfiddle,它显示了我想要完成的工作。 http://jsfiddle.net/kahanu/htqfa1qw/6/
【问题讨论】:
-
我使用 jquery-validation 没有敲除验证,所以我不确定你是否需要立即改变你的方法 - 应该能够弄清楚!几个想法:如果用户可以编辑开始日期,您可以将其绑定到可观察对象以帮助验证过程吗?以及您使用什么日期时间小部件 - 有时您需要使用更改事件戳这些小部件,以告诉 KO 更新 observable。
-
StartDate 和 EndDate 都已经是 observables 了,抱歉,我会编辑我的帖子,我应该把它包括在内。我正在使用 bootstrap-datepicker.js 小部件。但是这个 addMethod 不接受一个 observable 作为参数,我试过了。这就是为什么我需要求助于元素 ID 方法,但它不起作用。
-
从广义上讲,我发现将 jquery-validation 保持在 KO 之外效果很好。在这种情况下,我会将输入与相当正常的 jquery 验证方法进行比较。您不会在这里失去任何魔力,因为 jquery-validation 负责自己的更改事件跟踪。然后通常还需要修复将日期时间小部件推送到您的视图模型中。我只是在做一个小提琴来展示这种方法。是这个版本的 bootstrap-datetime 吗? eonasdan.github.io/bootstrap-datetimepicker
-
啊实际上你下面的小提琴很好,我有它在里面工作......会发布答案。
标签: javascript jquery validation knockout.js