2016-08-02 131 views
0

我想对2个交叉字段使用jquery validate()规则。如果任何一个字段在另一个字段中输入,也是必需的。此外,一旦需要它们,那么数字字段的格式应该是第15个数字应该是整数,日期字段应该是mm/dd/yyyy格式,并且日期应该小于今天的日期。jquery使用多个if/else条件验证规则

//.. 

    $("#adjustmentsFormID").validate({ 
    rules: {    
    refTranNbr: "required", 
    refTranDate: "required" 
    }, 
     messages: {   
      refTranNbr: { 
       required: function (element) { 
        if($("#refTranDate").val().length > 0){ 
         return "Please enter the reference transaction number "; 
        } else if(!refNumChk($("#refTranNbr").val())){ 
         return "Please enter a valid Reference Transaction Number";      
        } else { 
         return false; 
        } 
       } 
      },   
      refTranDate: { 
       required : function (element) { 
        var tdate = $("#refTranDate").val(); 
        if($("#refTranNbr").val().length > 0){      
         return "Please enter a date for the Refering Transaction to complete this transaction."; 
        }else if((new Date() > new Date(tdate))) { 
         return "Please enter a reference transaction date less than today's date."; 
        }else{ 
         return false; 
        } 

       } 
     }, 
    }); 


..// 

在这两种情况下,所需字段的第一个条件工作。但是,对于refNum字段,具有refNumChk的第二个条件不起作用。其实它没有被调用。同样,对于refTranDate所需的字段验证工作,但日期> tDate没有得到检查。不知道这种方法是否可行,或者我应该为多种情况做不同的事情。

回答

1

您的jQuery验证方法是错误的,messages用于在发生验证错误时仅返回错误消息。

所以,你正在做的唯一的验证是必要的验证,可以添加自定义的验证规则来解决这个

jQuery(function($) { 
 
    jQuery.validator.addMethod("refNumChk", function(value, element, params) { 
 
    return this.optional(element) || /^\d{15}[A-Z]$/.test(value); 
 
    }, jQuery.validator.format("Enter a value in forat aa-999")); 
 
    jQuery.validator.addMethod("lessThanToday", function(value, element, params) { 
 
    return this.optional(element) || new Date() > new Date(value); 
 
    }, jQuery.validator.format("Value should be less than today")); 
 

 

 
    $("#adjustmentsFormID").validate({ 
 
    rules: { 
 
     refTranNbr: { 
 
     required: true, 
 
     //refNumChk: true 
 
     pattern: /^\d{15}[A-Z]$/ 
 
     }, 
 
     refTranDate: { 
 
     required: true, 
 
     lessThanToday: true 
 
     } 
 
    }, 
 
    messages: { 
 
     refTranNbr: { 
 
     required: "Please enter the reference transaction number", 
 
     pattern: "Please enter a valid Reference Transaction Number" 
 

 
     }, 
 
     refTranDate: { 
 
     required: "Please enter a date for the Refering Transaction to complete this transaction.", 
 
     lessThanToday: "Please enter a reference transaction date less than today's date." 
 
     }, 
 
    } 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.13.1/jquery.validate.js"></script> 
 
<script src="http://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.13.1/additional-methods.js"></script> 
 
<form id="adjustmentsFormID" method="post" action=""> 
 
    <div> 
 
    <input name="refTranNbr" /> 
 
    </div> 
 
    <div> 
 
    <input name="refTranDate" /> 
 
    </div> 
 

 
    <input type="submit" value="Save" /> 
 
</form>

+0

http://jsfiddle.net/arunpjohny/kfrfebtd/1/ –

+0

..非常感谢。我可以在addMethod中添加自定义验证方法吗?例如,refNumChk应该是16个字符,前15个数字,最后一个字符应该是大写字母。 – JNPW

+1

@JNPW如果这是规则,那么您可以使用additional-method.js中的模式规则,如上所述 –