我有一些客户端验证,检查以确保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(); } });