2016-09-24 8 views
0

パズルにlaravelのrequired_if検証を実装しようとしていますが、正常に適用できましたが、エラーメッセージを表示中に大きな問題が発生しています。私は、次のカスタムバリデータを追加している - 今、私はそれがlaravelの検証に示されているまったく同じメッセージを表示したい条件付きエラーメッセージを適用するには?

<input class="form-control form-control-solid placeholder-no-fix" type="password" autocomplete="off" placeholder="Password" name="password" data-parsley-lpy-required-if="[&quot;email&quot;,&quot;[email protected]&quot;,&quot;[email protected]&quot;]" data-parsley-lpy-required-if-message="The password field is required when email address is :value." data-parsley-validate-if-empty="" data-parsley-whitespace="trim" data-parsley-lpy-custom-message="The password field is required when email address is :value."> 

-

window.Parsley.addValidator('lpyRequiredIf', { 
    validateString(value, requirement) { 
     const fieldValue = document.getElementsByName(requirement[0])[0].value; 
     if (requirement.indexOf(fieldValue) > -1) { 
      return value !== ''; 
     } 
     return true; 
    }, 
}); 

、私の入力を次のようになります。

これが示されているものである - 電子メールアドレスがあるとき

パスワードフィールドが必要です。値。

そして私が見せたい -

メールアドレスは[email protected]ときにパスワードフィールドが必要です。

どのように私はこれを達成することができますか?基本的には、valueを、妥当性検査が失敗した場合に入力された電子メールアドレスに置き換えたいと思います。

+0

「電子メールアドレスが必要な場合はパスワードフィールドが必要です」というエラーを表示して、あなたの電子メールを受け取った場所の値を添付してください。 –

+0

@MehravishTemkarカスタムバリデーターでどのように行うことができますか?カスタムバリデーターでは静的メッセージを指定できますが、変数では指定できません。検証が失敗するたびに置き換えるオプションがありますが、カスタム検証で検証に失敗したフィールドを取得できないという問題が再び発生します。 (この検証を使用している複数のフィールドがあるかもしれません) – Anik

+0

tbhパセリを一度も使用していません.. idkなぜあなたはdownvotedですか、少なくとも理由を指定する必要があります..私はあなたがすぐにソリューションを得ることを願っています。何か.. –

答えて

0

私はそれがどのようにできるかを考え出しました。値:

deferred.reject(baseErrorMessage.replace( ' - ここで私は、カスタムエラーメッセージを返すのです

window.Parsley.addValidator('lpyRequiredIf', { 
    validateString(value, ...requirement) { 
     let valid = true; 
     const formElement = $(requirement[requirement.length - 1].parent.$element); 
     const fieldToCheck = formElement.find(`[name= ${requirement[0]} ]`); 
     if (fieldToCheck.length !== 0) { 
      const fieldValue = fieldToCheck.val(); 
      const deferred = new $.Deferred(); 
      const baseErrorMessage = requirement[requirement.length - 1] 
            .domOptions.lpyRequiredIfMessage; 
      if (requirement.indexOf(fieldValue) > -1 && value === '') { 
       deferred.reject(baseErrorMessage.replace(':value', fieldValue)); 
      } else { 
       deferred.resolve(); 
      } 
      valid = deferred.promise(); 
     } 
     return valid; 
    }, 
}); 

- 私は表示する必要があるカスタムメッセージとして最初の引数でjqueryの約束を返す必要があります'、fieldValue));

P.S. - コードは私がより洗練された必要があるので、質問から少し編集されます。

関連する問題