不显眼的日期比较验证器

时间:2013-10-30 00:28:37

标签: javascript jquery asp.net asp.net-mvc unobtrusive-validation

所以我一直在关注本教程here,它向您展示了如何验证日期相互比较。我在第一个代码块中得到一个错误,我已经评论过,并且它说“无法获取未定义或空引用的属性'元素”,这来自这行代码customValidation.formValidator = $(event.data .source).closest('form')。data('validator')让任何人都知道这方面的工作,所以我没有收到错误。我正在使用最新的不显眼的验证

window.customValidation = window.customValidation ||
{
    relatedControlValidationCalled: function (event) {
        if (!customValidation.activeValidator) {
            customValidation.formValidator = $(event.data.source).closest('form').data('validator');
        }

        // code error below
        customValidation.formValidator.element($(event.data.target));
    },
    relatedControlCollection: [],
    formValidator: undefined,
    addDependatControlValidaitonHandler: function (element, dependentPropertyName) {
        var id = $(element).attr('id');
        if ($.inArray(id, customValidation.relatedControlCollection) < 0) {
            customValidation.relatedControlCollection.push(id);
            $(element).on(
                'blur',
                { source: $(element), target: $('#' + dependentPropertyName) },
                customValidation.relatedControlValidationCalled);
        }
    }
};

适配器:

$.validator.unobtrusive.adapters.add('comparedates', ['otherpropertyname', 'allowequality'],
    function (options) {
        options.rules['comparedates'] = options.params;
        if (options.message) {
            options.messages['comparedates'] = options.message;
        }
    }
);

验证方法:

$.validator.addMethod('comparedates', function (value, element, params) {
    var otherFieldValue = $('input[name="' + params.otherpropertyname + '"]').val();
    if (otherFieldValue && value) {
        var currentValue = Date.parse(value);
        var otherValue = Date.parse(otherFieldValue);
        if ($(element).attr('name').toLowerCase().indexOf('begin') >= 0) {
            if (params.allowequality) {
                if (currentValue > otherValue) {
                    return false;
                }
            } else {
                if (currentValue >= otherValue) {
                    return false;
                }
            }
        } else {
            if (params.allowequality) {
                if (currentValue < otherValue) {
                    return false;
                }
            } else {
                if (currentValue <= otherValue) {
                    return false;
                }
            }
        }
    }
    customValidation.addDependatControlValidaitonHandler(element, params.otherpropertyname);
    return true;
}, '');

1 个答案:

答案 0 :(得分:0)

在表单位于DOM之前,您可能过早加载此代码。确保您的代码受$(document).ready(您的代码在此处);

的保护