jquery 使用动态错误消息验证添加方法

jquery validation addmethod with dynamic error message

我正在使用 jquery.validation 来验证输入的出生日期。我正在使用 Add 方法,但想根据输入的值有什么问题来自定义错误消息。我正在使用 moment.js 进行日期验证。

所以第一次检查应该检查它是否有效。然后我想检查这个人是否小于 1 或大于 110,如果不是则显示适当的错误消息。

我试过设置一个全局变量,但是因为消息是在构造函数中设置的,所以这是无效的 - 但我把它留在这里以展示我的尝试。

我的代码如下

var err = 'error date'; /* using this method does not work */

jQuery.validator.addMethod("validDOB", function(value, element) {
            
    if (value != "") {
        try {
            if (!moment(value,"DD-MM-YYYY",true).isValid()) {
                throw "Please enter a valid date (dd-mm-yyyy)!";
            }
            
            var years = moment().diff(moment(value, "DD-MM-YYYY"), 'years');
            
            if (years < 1) {
                throw "You seem a little young";
            }
            
            if (years > 110) {
                throw "You seem a little old";
            }
                
        }
        catch (e) {
            err = e;
            return false;
        }
    }
    
    return true;
}, err);

function setupValidation()
{   
    registerValidator = $("#UserReg").validate({
        rules: {
            txtRegUserDOB: {
                validDOB: true
            }
        }
    });
}

setupValidation();

有没有办法生成这样的自定义错误消息?

您可以如下定义自定义错误消息:

jQuery.validator.addMethod("validDOB", function(value, element) {                
       if (value != "") {
            if (!moment(value,"DD-MM-YYYY",true).isValid()) {
                return false;
            }                
            var years = moment().diff(moment(value, "DD-MM-YYYY"), 'years');                
            if (years < 1) {
                return false; 
            }                
            if (years > 110) {
                return false;
            }                    
        }           
    return true;
}, function(error, element){
    var value = $(element).val();
    if (!moment(value,"DD-MM-YYYY",true).isValid()) {
        return "Please enter a valid date (dd-mm-yyyy)!";
    }
    
    var years = moment().diff(moment(value, "DD-MM-YYYY"), 'years');
    
    if (years < 1) {
        return "You seem a little young";
    }
    
    if (years > 110) {
        return "You seem a little old";
    }
});

function setupValidation()
{   
    registerValidator = $("#UserReg").validate({
        rules: {
            txtRegUserDOB: {
                validDOB: true
            }
        }
    });
}

setupValidation();