2017-09-22 22 views
0

jQueryのフォーム検証の作業。支払いには3つのオプションがあります(クレジット、ビットコイン、ペイパル)。ユーザーがクレジットカード以外のものを選択して送信すると、フォームはクレジットカードではない場合に停止する言語を追加したにもかかわらず、クレジットカードの検証への呼び出しを開始します。また、クレジットカードに値をリセットしています。jQueryのネストされたIfステートメント

here is jfiddle

私は支払の選択に基づいてフィールドを隠すかを示すコード

//Changes Payment Sections Based on User Payment Choice 
$('#bitcoin').hide(); 
$('#paypal').hide(); 
$("#payment option[value='credit card']").prop('selected', true); 
$('#payment').on('change', function(){ 
    if($(this).val() == 'credit card'){ 
     $('#bitcoin').hide(); 
     $('#paypal').hide(); 
     $('#credit-card').show(); 
    } else if ($(this).val()=='paypal'){ 
     $('#paypal').show(); 
     $('#credit-card').hide(); 
     $('#bitcoin').hide(); 
    } else if ($(this).val()=='bitcoin'){ 
     $('#paypal').hide(); 
     $('#credit-card').hide(); 
     $('#bitcoin').show(); 
    } 

}); 

を持っていますし、これは、フォームの送信に

// On Form Submission Validate Form 
$("#contact_submit button").click(function(event){ 
    error_name = validateName(); 
    error_email = validateEmail(); 
    error_activity = validateActivities(); 
    isCreditIssue = validateCredit(); 

    var valid = true; 

    if ((error_name) || (error_email) || (error_activity) || (isCreditIssue)){ 
     console.log("errors"); 
     valid = false; 
     event.preventDefault(); 
    } else { 
     alert('GREAT! form completed'); 
     valid = true; 
    } 
    if (valid) { 
    return; 
    } 


}); 

を何が起こっているかであり、ここでvalidateCredit機能です。もし私がここにいれば、ネストされたものが正しく動作していない可能性があります。私は少しこれを変更しようとしましたが、正しく動作するようなものは得られません。

//Check for Credit Card Issue -- Any problems with CC, Zip Code or CVV 
function validateCredit(){ 
    var credit = $("#payment option[value='credit card']"); 
    var paypal = $("#payment option[value='paypal']"); 
    var bitcoin = $("#payment option[value='bitcoin']"); 

    isCreditIssue = false; 


    if (credit.prop('selected', true)){ 
     errorCC = validateCC(); 
     errorZip = validateZip(); 
     errorCVV = validateCVV(); 

     if ((errorCC) || (errorZip) || (errorCVV)){ 
     isCreditIssue = true; 
     console.log('credit issue'); 
    } } 
    else if (bitcoin.prop('selected', true)){ 
     console.log('bitcoin'); 
     isCreditIssue = false; 

    } else if (paypal.prop('selected', true)){ 
     console.log('paypal'); 
     isCreditIssue = false; 
    } 

    return isCreditIssue; 
} 
+0

。 [prop()](http://api.jquery.com/prop/)のドキュメントを見てください。 –

+0

あなたは非常に正しいです...ありがとうございます –

+0

ちょうどコメント...値を 'クレジットカードからクレジットカードへの支払い変更ハンドラを減らすことができます: '$("#bitcoin、#paypal、#credit-card ")hide()。filter("# "+ this.value) – Andreas

答えて

1

あなたがいない関数にprop第二引数を与えることによって、それを設定し、プロパティの値を返す必要があります:あなたは、プロパティ値が1を取得していない設定されている

function validateCredit(){ 
     var credit = $("#payment option[value='credit card']"); 
     var paypal = $("#payment option[value='paypal']"); 
     var bitcoin = $("#payment option[value='bitcoin']"); 

     isCreditIssue = false; 


     if (credit.prop('selected'){ 
      errorCC = validateCC(); 
      errorZip = validateZip(); 
      errorCVV = validateCVV(); 

      if ((errorCC) || (errorZip) || (errorCVV)){ 
      isCreditIssue = true; 
      console.log('credit issue'); 
     } } 
     else if (bitcoin.prop('selected')){ 
      console.log('bitcoin'); 
      isCreditIssue = false; 

     } else if (paypal.prop('selected'){ 
      console.log('paypal'); 
      isCreditIssue = false; 
     } 

     return isCreditIssue; 
    } 
+0

これはそれです...非常にありがとうございます(私はあなたに感謝します)show() '([fiddle](https://jsfiddle.net/drg74k1v/)) –

関連する問題