7

EndDateが 以上であることを確認するクライアント側の検証がありますStartDate。検証は機能しますが、希望どおりに起動しません。の日付ピッカーで日付が選択されるとすぐに起動したいと思いEndDateます。どうすればこれを達成できますか? 私は次のことを試しました:

デートピッカーコード:

$(".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;
    }
})
4

2 に答える 2

9

.focusout()イベント内でバリデーターを割り当てています。一度だけ割り当てたいので、そのブロックを完全に削除します。

onSelect次のように、オプションの検証を簡単にトリガーできます。

$(".datepicker").datepicker({
    changeMonth: true,
    changeYear: true,
    onSelect: function () {
        $("#myForm").valid();
    }
});
于 2013-05-07T13:46:11.927 に答える