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

The*_*lla 7 jquery jquery-ui datepicker jquery-validate

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

Datepicker代码:

$(".datepicker").datepicker({
    changeMonth: true,
    changeYear: true,
    onClose: function () {
        $(this).focusout();
    }
});
Run Code Online (Sandbox Code Playgroud)

验证码:

$("#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;
    }
})
Run Code Online (Sandbox Code Playgroud)

Reb*_*cca 11

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

$(".datepicker").datepicker({
    onSelect: function () {
        $(this).trigger("focus").trigger("blur");
    }
});
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*man 9

您正在我们的.focusout()活动中分配验证器.完全删除该块,因为您只希望它们分配一次.

您可以轻松触发对该onSelect选项的验证,如下所示:

$(".datepicker").datepicker({
    changeMonth: true,
    changeYear: true,
    onSelect: function () {
        $("#myForm").valid();
    }
});
Run Code Online (Sandbox Code Playgroud)