我有一些客户端验证,检查以确保EndDate大于或等于StartDate.验证有效,但它并没有像我希望的那样触发.我想在EndDate的日期选择器上选择日期后立即触发.我怎么能做到这一点?我尝试过以下方法:
Datepicker代码:
$(".datepicker").datepicker({
changeMonth: true,changeYear: true,onClose: function () {
$(this).focusout();
}
});
验证码:
$("#EndDate").focusout(function () {
jQuery.validator.addMethod('datetimegreaterthanorequal',function (value,element,params) {
var startDateValue = $(params.element).val();
return Date.parse(value) >= Date.parse(startDateValue);
},'');
jQuery.validator.unobtrusive.adapters.add('datetimegreaterthanorequal',['startdate'],function (options) {
var prefix = options.element.name.substr(0,options.element.name.lastIndexOf('.') + 1),other = options.params.startdate,fullOtherName = appendModelPrefix(other,prefix),element = $(options.form).find(':input[name=' + fullOtherName + ']')[0];
options.rules['datetimegreaterthanorequal'] = {
element: element
};
if (options.message) {
options.messages['datetimegreaterthanorequal'] = options.message;
}
});
function appendModelPrefix(value,prefix) {
if (value.indexOf('*.') === 0) {
value = value.replace('*.',prefix);
}
return value;
}
})
解决方法
您正在我们的.focusout()事件中分配验证器.完全删除该块,因为您只希望它们分配一次.
您可以轻松触发onSelect选项的验证,如下所示:
$(".datepicker").datepicker({
changeMonth: true,onSelect: function () {
$("#myForm").valid();
}
});