一旦选择了日期,如何在jQuery UI datepicker上触发validation?

我有一些客户端validation,检查以确保EndDate大于或等于StartDate 。 validation有效,但它并没有像我希望的那样触发。 我想在EndDate的日期选择器上选择日期后立即触发。 我怎么能做到这一点? 我尝试过以下方法:

Datepicker代码:

 $(".datepicker").datepicker({ changeMonth: true, changeYear: true, onClose: function () { $(this).focusout(); } }); 

validation码:

 $("#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()事件中分配validation器。 完全删除该块,因为您只希望它们分配一次。

您可以轻松触发onSelect选项的validation,如下所示:

 $(".datepicker").datepicker({ changeMonth: true, changeYear: true, onSelect: function () { $("#myForm").valid(); } }); 

虽然Mark的答案可行,但您应该注意它将validation整个表单。 如果您只想validation相关的输入字段,那么最好这样做:

 $(".datepicker").datepicker({ onSelect: function () { $(this).trigger("focus").trigger("blur"); } }); 

这会假定用户在输入字段内单击并再次将其保留。