对字段使用jQuery验证规则两次

时间:2013-08-26 10:57:57

标签: jquery validation jquery-validate

我正在尝试验证包含用户出生日期的输入字段,我需要执行两次检查 - 1。确保用户为18岁, 2. 确保他/她的年龄不超过100岁。

我的自定义验证方法 -

$.validator.addMethod(
       "datediff",
       function(value, element, diff_years) {
          var curr_date = new Date().getFullYear();
          var element_date = Date.parse($(element).val()).getFullYear();
          return element_date >= curr_date - diff_years;
       }
);

以下是我添加规则的方法。

var validator = $('form').validate({
     rules: {
        'dob': {datediff: 18}
     },
     messages: {
         dob: {datediff: 'You have to be 18 or more!'}
     }
});

如何重复使用datediff规则两次,以便我可以同时执行这两项检查?我尝试添加另一个datediff规则,但这不起作用。

编辑:我还需要显示2条不同的消息 - 例如 - 1. “您必须为18或更多”表示第一个条件,并且“你不能超过100”

3 个答案:

答案 0 :(得分:2)

如果您需要两条独特的消息,那么您将需要两个独特的规则/方法。您可以将公共代码放入单个函数中,并在自定义方法中调用它。

像这样......

function datediff(value, diff_years) {
    var curr_date = new Date().getFullYear();
    var element_date = Date.parse(value.getFullYear();
    return element_date >= curr_date - diff_years;
}

$.validator.addMethod( "over18", function(value, element) {
    // your custom function below
    // var result = datediff(value, 18);
    // return true if age is greater than 18
    // return false and error message will display
}, "You must be over 18");

$.validator.addMethod( "under100", function(value, element) {
    // your custom function below
    // var result = datediff(value, 100);
    // return true if age is less than 100
    // return false and error message will display
}, "You must be under 100");

$('form').validate({
     rules: {
         dob: {
             over18: true,
             under100: true
         }
     }
});

答案 1 :(得分:1)

如果您想处理2条不同的消息,那么您可以使用maxmin

  

max:使元素需要一个给定的最大值   min:使元素需要给定的最小值。

<强>规则:

    rules: {
        dob: {
            min: 18,
            max: 100,
            required: true
        }
    }

显示的消息:

    messages: {
        dob: {
            required: "Please enter the age",
            min: "Enter the age above 18",
            max: "Age should be below 100"
        }
    }

查看JSFiddle

答案 2 :(得分:0)

尝试使用范围规则:

rules: {
field: {
  required: true,
    range: [18, 100]
  }
}

来源:http://jqueryvalidation.org/range-method