jquery validate:如果有条件要求,则应用自定义方法

时间:2015-04-20 17:02:15

标签: javascript jquery jquery-validate

我的表单中有三个字段:状态,询问日期和预期日期

如果我的状态= A,我希望在验证时需要我的预期日期 另外,我希望我的预期日期有效,总是大于询问日期

所以这是我的规则

rules: {
      status: {
        required: true,
      },
      ask_date: {
        required: true,
        date:true,
      },
      expected_date: {

        required: function(element){
            if($('#status').val()=='A'){
              return true;
            } else {
              return false;
            }
        },

        greaterThan: "#ask_date",
        date:true,
      },

如果字段符合要求的条件,我该怎么说才能调用greaterThan方法?

“greaterThan”是自定义jquery验证方法,我在这里使用单独的堆栈溢出Validate that end date is greater than start date with jQuery

jQuery.validator.addMethod("greaterThan", 
function(value, element, params) {

    if (!/Invalid|NaN/.test(new Date(value))) {
        return new Date(value) > new Date($(params).val());
    }

    return isNaN(value) && isNaN($(params).val()) 
        || (Number(value) > Number($(params).val())); 
},'Must be greater than {0}.');

1 个答案:

答案 0 :(得分:1)

  

"如果字段符合greaterThan条件,我该怎么说才能调用required方法?"

由于该字段在这些条件下仅为required,理想情况下,当字段留空时,不应触发任何其他规则。但是,自定义方法中缺少一个部分,只要该字段留空,就会忽略它。

根据条件this.optional(element)进行测试,可确保您的自定义规则不会在空白字段上强制执行。

jQuery.validator.addMethod("greaterThan", function(value, element, params) {
    if (this.optional(element)) {  // "required" not in force and field is empty
        return true;
    } else {  // otherwise, use your rule
        if (!/Invalid|NaN/.test(new Date(value))) {
            return new Date(value) > new Date($(params).val());
        }
        return isNaN(value) && isNaN($(params).val()) || (Number(value) > Number($(params).val()));
    }
},'Must be greater than {0}.');