2017-08-17 17 views
0

部分的に動作する以下のコードがあります。国がカナダの場合はpay_id_1 == 1、またはpay_id_1 == 234の場合は米国の郵便番号を確認する必要があります。郵便番号のjquery検証規則

var validator = $form.validate({ 
    ignore: ".ignore,:hidden:not(input[type='hidden'])", 
    rules: { 
     par_prenom_1: { 
      required: true 
     }, 
     par_nom_1: { 
      required: true 
     }, 
     par_adresse_1: { 
      required: true 
     }, 
     par_ville_1: { 
      required: true 
     }, 
     pro_id_1: { 
      required: true 
     }, 
     pay_id_1: { 
      required: true 
     }, 
     par_codepostal_1: { 
      required: true, 
      postalCodeCA: function() { 
       if ($("#pay_id_1").val() === 1) { 
        return true 
       } else { 
        return false 
       } 
      }, 
      zipcodeUS: function() { 
       if ($("#pay_id_1").val() === 234) { 
        return true 
       } else { 
        return false 
       } 
      } 
     }, 
     par_telephone1_1: { 
      required: true 
     }, 
     par_courriel_1: { 
      required: true, 
      email: true 
     }, 
     par_naissance_1: { 
      required: true, 
      dateCA: true, 
      daterange: ["1917-09-04", "2001-09-03"] 
     }, 
     par_sexe_1: { 
      required: true 
     }, 
     que_2580_1: { 
      required: true 
     }, 
     que_2581_1: { 
      required: true 
     }, 
     que_2582_1: { 
      required: true 
     }, 
     que_2583_1: { 
      required: true 
     } 
    }, 
    messages: { 
     par_prenom_1: { 
      required: "Veuillez entrer une valeur" 
     }, 
     par_nom_1: { 
      required: "Veuillez entrer une valeur" 
     }, 
     par_adresse_1: { 
      required: "Veuillez entrer une valeur" 
     }, 
     par_ville_1: { 
      required: "Veuillez entrer une valeur" 
     }, 
     pro_id_1: { 
      required: "Veuillez entrer une valeur" 
     }, 
     pay_id_1: { 
      required: "Veuillez entrer une valeur" 
     }, 
     par_codepostal_1: { 
      required: "Veuillez entrer le code postal/zip", 
      postalCodeCA: "Veuillez entrer un code postal/zip valide" 
     }, 
     par_telephone1_1: { 
      required: "Veuillez entrer le numéro de téléphone", 
      phoneUS: "Le numéro de téléphone doit être sous le format 555-555-5555" 
     }, 
     par_courriel_1: { 
      required: "Veuillez entrer le courriel", 
      email: "Le courriel doit être une adresse valide" 
     }, 
     par_naissance_1: { 
      required: "Veuillez entrer la date de naissance", 
      dateCA: "La date de naissance doit être sous le format AAAA-MM-JJ", 
      daterange: "La date de naissance doit être entre {0} et {1}" 
     }, 
     par_sexe_1: { 
      required: "Veuillez entrer une valeur" 
     }, 
     que_2580_1: { 
      required: "Veuillez faire un choix" 
     }, 
     que_2581_1: { 
      required: "Veuillez entrer une valeur" 
     }, 
     que_2582_1: { 
      required: "Veuillez entrer une valeur" 
     }, 
     que_2583_1: { 
      required: "Veuillez entrer une valeur" 
     } 
    } 
}); 

問題はいずれの国にも適用されます。私は何ができないのか分かりますか?

+0

ポスト関連するHTMLので、デモを構築することができます。あなたがそれにいる間、無関係なすべてのフィールドを取り除きます。この問題を示す最小限の例です。 – Sparky

+0

また、文字列を返す '$("#pay_id_1 ").val()'と数字リテラル、 '1'と' 234'を厳密にチェックしています。これは、$( "#pay_id_1")。val() 'が' '234 ''であっても毎回失敗します。 '' 234 '=== 234 ==> false'。 3つのオプションがあります:1) '$("#pay_id_1 ")。val()'を数値に変換します。例: '+ $("#pay_id_1 ")。val()=== 1'。 2)数値リテラルを文字列リテラルに変換します。例: '$("#pay_id_1 ")。val()=== '1' '。 3)自動型強制を実行するdouble-equals演算子を使用します:Ex: '$("#pay_id_1 ")。val()== 1'。 – usandfriends

答えて

1

フィールドのルールを動的に変更するには、.rules()メソッドを利用する必要があります。

イベントは、clickイベントとfocusイベントを使用してトリガーできます。 .validate()メソッド内のrulesオブジェクトを使用して、初期のデフォルトルールを設定します。

また、他の回答に記載されているように、フィールドの値は文字列であるため、引用符を使用する必要があります。

$('[name="par_codepostal_1"]').on('click focus', function() { 
    if ($("#pay_id_1").val() === '1') { 
     $(this).rules('add', { 
      postalCodeCA: true, 
      zipcodeUS: false 
     }); 
    } else if ($("#pay_id_1").val() === '234') { 
     $(this).rules('add', { 
      postalCodeCA: false, 
      zipcodeUS: true 
     }); 
    } else { 
     // whatever 
    } 
}); 

DEMOは:jsfiddle.net/rb3fetuk/

また、ルールの変更をトリガすることができたときblur離れpay_id_1フィールドから。

$('#pay_id_1').on('blur', function() { 
    if ($(this).val() === '1') { 
     $('[name="par_codepostal_1"]').rules('add', { 
      postalCodeCA: true, 
      zipcodeUS: false 
     }); 
    } else if ($(this).val() === '234') { 
     $('[name="par_codepostal_1"]').rules('add', { 
      postalCodeCA: false, 
      zipcodeUS: true 
     }); 
    } else { 
     // whatever 
    } 
}); 

DEMO:jsfiddle.net/rb3fetuk/1/

+0

ぼかし処理がうまくいきました。変更イベントを追加しました。ありがとうございます! – jesse94