1

2 つのテキスト入力と 2 つのラジオ ボタンを備えたフォームがあります。1 つのラジオ ボタンは、顧客が今後すべての連絡を紙のメールで行いたい場合に使用し、もう 1 つのボタンは、顧客が電子メールでの連絡を希望する場合に使用します。

ユーザーが電子メールを選択すると、入力テキストボックスの 1 つに電子メール アドレスを入力する必要があります。ユーザーが郵便を選択すると、他のボックスに住所を入力する必要があります。

これには、カスタム jquery 検証エンジン関数があります。

function checkBillRoutePostalAddressConflict(field, rules, i, options){
  var fieldValue = field.val();
  var accountIdR = field.attr('id').match(/\d+$/);
  var radioButton = jQuery('#postalBillsDestination_' + accountIdR);
  if(!fieldValue && radioButton.attr("checked")){
    alert('options.allrules.checkBillRoutePostalAddressConflict.alertText') // for debugging
    return options.allrules.checkBillRoutePostalAddressConflict.alertText;
  }
}

バリデーターがクラスとともに入力テキストフィールドに追加されますclass="validate[funcCall[checkBillRoutePostalAddressConflict]]"

問題は、それが機能しないことです。条件が正しいことを意味するデバッグ アラート メッセージが表示されます。それを他のカスタムバリデータの1つに置き換えると、すべてうまくいきます。

空であってはならないフィールドにカスタム検証関数を書き込むと、jQuery が validate[required] を使用する必要があるため、メッセージが表示されない、と誰かが私に言いました。

これが本当なら、誰もハックではない回避策を知っていますか?

1 つのオプションはshowPrompt直接使用することですが、よりクリーンで優れたものがあるかもしれません。
ありがとうございました!

4

1 に答える 1

0

要素のルールは true または false だけでなく、関数にすることもできます。その関数は、電子メールのチェックボックスがオンになっているかどうかを確認し、true (そうでない場合は false) を返すことができます。

$('#form').validate({
    'rules': {
        'email_text_field': {
            'required': function() { return $('#email-radio').is(':checked'); }
        }
    }           
});

ここでは、デフォルトrequiredのバリデータが使用されます。

于 2012-09-11T09:06:10.037 に答える