2016-08-02 15 views
0

jquery validate()ルールを2つのクロスフィールドに使いたい。いずれかのフィールドが他のフィールドに入力されている場合は、そのフィールドも必要です。また、一度それらが必要とされると、数値フィールドのフォーマットは最初の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を持つ第2の条件は機能していません。実際に呼び出されていない。 refTranDateの場合と同様にフィールドの検証作業は必須ですが、date> 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は最初の15桁の16文字で、最後の文字は大文字でアルファベットでなければなりません。 – JNPW

+1

@JNPWこれがルールの場合、上記のようにadditional-method.jsのパターンルールを使用できます –