2016-08-27 10 views
0

JSの新しい男にここ!私のコードが何をしているのか理解していると感じますが、それでも動作しません。フォームバリデーションの苦境

バグは電話番号フォームの検証で(おそらく)、私の知る限りでは動作するはずのコードがありますが、そうではありません。

私はアドレス、ポストコード、およびCCを検証するコードを持っていないことに注意してください。アイデアは、私があなたの解決策を論文に適用できるということです。彼らは電話番号に似ています。

また、私はisNaNを試しましたが、それは "奇妙な"ものでした。それほど曖昧ではないことを願っていますが、私はあなたの何人かが私が何を話しているか「知っている」と確信しています。

ここでは、

たちができれば離れて鈍い答えからご利用いただけます(私の機能は少し長い場合申し訳ありませんが、その悪い習慣または何なら、私に知らせてください。)行きますか?

function detailCheck() { 
 
    var phNoLength = document.getElementById('phNo').value.length; //get value for phone number from form for checking 
 
    var cardNoLength = document.getElementById('cardNo').value.length; //get value for card number length for checking 
 
    var postCodeLength = document.getElementById("postCode").value.length //get value for post code length 
 
    var a = /^[A-Za-z]+$/; 
 
    var b = /^[-+]?[0-9]+$/; 
 
for (var i = 0; i < 5; i++) { 
 
    details = document.getElementById("myForm")[i].value; 
 
    if (details === "") { 
 
    var i = ("Please enter ALL your details."); 
 
    document.getElementById("formTital").innerHTML=i; 
 
    return; 
 
    } else { 
 
    
 
    if(phNoLength != 7) { 
 

 
     var i = "Please use a phone number with a length of 7"; 
 
     document.getElementById("formTital").innerHTML = i;  
 
    } else { 
 
     if(b.test(document.getElementById("phNo").value)) { 
 
     \t 
 
     if(postCodeLength === 4){ 
 
      
 
     var f_nameLength = document.getElementById('fName').value.length; 
 
     var l_nameLength = document.getElementById('lName').value.length; 
 

 
     if(f_nameLength < 3) { 
 
     var i = "First name not long enough" 
 
     document.getElementById("formTital").innerHTML=i; 
 

 
     } else { 
 

 
      if(a.test(document.getElementById("fName").value)) {  
 
     \t if(l_nameLength < 3) { 
 
       var i = "Last name not long enough" 
 
       document.getElementById("formTital").innerHTML=i; 
 

 
       } else { 
 

 
        if(a.test(document.getElementById("lName").value)) { 
 
        \t 
 
        \t if(cardNoLength === 4) { 
 
        \t \t 
 
        \t \t if(isNaN(cardNoLength)) { 
 
          var i = "Your card number must be numbers only"; 
 
          document.getElementById("formTital").innerHTML=i; 
 

 
         } else { 
 
          //---- End result ----// 
 
          toggleContent(); 
 
          //--------------------// 
 
         } 
 
         } else { 
 
       \t   var i = "Your card number must have four numbers"; 
 
         document.getElementById("formTital").innerHTML = i; 
 
         } 
 
        } else {  
 
        var i = "Please only use letters in your last name"; 
 
        document.getElementById("formTital").innerHTML=i; 
 
        } 
 
       } 
 
      } else { 
 
     \t  var i = "Please only use letters in your first name"; 
 
      document.getElementById("formTital").innerHTML=i; 
 
      } 
 

 
     } 
 
     } else { 
 
    \t var i = "Please use a post code with a length of four"; 
 
    \t document.getElementById("formTital").innerHTML = i; 
 
     } 
 
    } else { 
 
    var i = "only use numbers in your Phone number"; 
 
    document.getElementById("formTital").innerHTML=i; 
 
    } 
 
} 
 
} 
 
} 
 
}
<form id="myForm" action="form_action.asp"> 
 
    First name: <br> <input class="formInput" type="text" id="fName" name="fName"><br> 
 
    Last name: <br> <input class="formInput" type="text" id="lName" name="lName"><br> 
 
    Phone Number: <br> <input class="formInput" type="number" id="phNo" name="phNo" maxlength="7"><br> 
 
    Credit Card Number: <br> <input class="formInput" type="password" id="cardNo" name="cardNo" maxlength="4"><br> 
 
    Address: <br> <input class="formInput" type="text" id="address" name="address"><br> 
 
    Post code: <br> <input class="formInput" type="number" id="postCode" name="postCode" maxlength="4"><br> 
 
    </form>

+0

これはネストされた 'if'sの* lot *です... –

+0

これは悪いものですか?あなたはどのように論文のような条件を設定しますか? – Draxy

+0

必ずしも悪いことではありませんが、私は個人的には、特にインデントに応じて非常に混乱すると思います。 –

答えて

0

:私はそれを自分で修正することができますので、私はあなたが患者:)

JSとHTMLであることを心を持っている場合は、それを通して私を歩いて、いただきました!間違っ知りたいのですが検証を実行するときは明確ではありません(関数をインクルードしましたが、イベントハンドラにするかどうかはわかりません)。

あなたの正規表現は正常であるようです。私はkeyupのイベントハンドラを添付して.test()の正規表現を示した単一のinputでJSFiddleを取り除きました。

あなたのコードに関しては、かなり面倒です。フォーム検証の面で。私はあなたがそのユーザのために単一のステータスメッセージを表示することを意味していたと仮定します。だから、あなたはあなたの検証の優先順位をまず知りたいでしょう。

function getErrorMessage(){ 
    // if name is invalid 
    //   return 'Your name is invalid.'; 
    // if phone is invalid 
    //   return 'Your phone is invalid.'; 
    // ... 
    // return ''; 
} 

ネスト非常に多くの条件文は非常に厄介な、非常に非保守性スパゲッティコードにつながることができます:ワンクリーナーのオプションは、例えば、この擬似コードを取り、注文return sの機能を使用することです。 Javascriptを初めてお使いの方は、早い段階でベストプラクティスを学ぶことをお勧めします。これは、将来頭痛や顔面苦痛を大幅に軽減します。

質問が正しく理解できなかった場合は、私にお知らせください。

+0

私はこの機能をプログラミングすることを考えています。それはちょっと面倒ではありません。しかし、チェックするだけの条件がたくさんあります!これに対処する方法についてのアドバイスはありますか?別々の機能かもしれない? – Draxy

+0

複雑である必要はありません。このタイプのデザインを再現したい場合は、適切な検証順序であると感じるものを決定してください。 自然なUXは、ぼやけて無効だった最後の入力に対して無効なメッセージを持つように感じる。それに関するフォームの検証とUI/UXを読んでください。 –

関連する問題