2014-01-11 127 views
0

我試圖得到一個表格按下提交按鈕時,多個字段進行驗證。JavaScript表單驗證 - 無法驗證多個字段

如果字段是無效的,那麼顯示該字段旁邊的消息。我可以看到其中一條無效消息出現,但不是全部。我正在使用的功能如下。

function checkForm() {   
    document.getElementById("test").onsubmit=function(){ 
     var title = document.getElementById("titles"); 
     if (title.selectedIndex == -1) { 
      return null; 
     } 

     var email = document.getElementById('email'); 
     //Regular Expression for checking email 
     var emailRegEx = /[-\w.][email protected]([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}/; 
     if (!emailRegEx.test(email.value)) { 
      document.getElementById("errEmail").style.display="inline"; 
      return false; 
     } 

     if(document.getElementById("fname").value==""){ 
      document.getElementById("errfName").style.display="inline"; 
      return false; 
     } 
     else { 
      return true; 
     } 

     if(document.getElementById("lname").value==""){ 
      document.getElementById("errlName").style.display="inline"; 
      return false; 
     } 
     else { 
      return true; 
     }  
    } 
} 

HTML下面

<form name ="reg" id="test"> 
    <fieldset id="controls"> 

    <div> 
    <label for="title">Title: </label> 
    <select id="titles"> 
     <option value="mr" selected="selected">Title</option> 
     <option value="mr">Mr.</option> 
     <option value="mrs">Mrs.</option> 
     <option value="ms">Ms.</option> 
     <option value="miss">Miss</option> 
    </select> 
    </div> 

    <div> 
     <label for="fname">First Name: </label> 
     <input id="fname" type="text"><span id="errfName" class="error">* Please Enter a First Name</span> 
    </div> 


    <div> 
     <label for="lname">Last Name: </label> 
     <input id="lname" type="text"><span id="errlName" class="error">* Please Enter a Last Name</span> 
    </div> 


    <div> 
     <label for="email">Email: </label> 
     <input id="email" type="text" size="40"><span id="errEmail" class="error">* Please enter a valid email</span> 
     </div> 
    <div> 
     <input type="submit" value="submit"> 
     </div> 
    </fieldset> 
</form> 
</body> 
</html> 
+1

那麼你的HTML是什麼樣子? –

+2

您的「返回false」;正在退出該功能。所以,一旦你的第一個錯誤出現,它會返回false; Bamn ..停止執行其他測試。和你的「迴歸真實」一樣。一旦出現這些情況之一,就退出其餘的測試。 –

+0

謝謝詹姆斯,我有什麼建議可以繼續? – dimma415

回答

1

試試這個:

function checkForm() { 
    var errors = [];  
    document.getElementById("test").onsubmit=function(){ 
    var title = document.getElementById("titles"); 
    if (title.selectedIndex == -1) { 
     return null; 
    } 

    var email = document.getElementById('email'); 
    //Regular Expression for checking email 
    var emailRegEx = /[-\w.][email protected]([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}/; 
    if (!emailRegEx.test(email.value)) { 
     errors.push("errEmail"); 
    } 

    if(document.getElementById("fname").value==""){ 
     errors.push("errfName"); 
    } 

    if(document.getElementById("lname").value==""){ 
     errors.push("errlName"); 
    } 
    if(errors.length > 0){ 
     for(var i=0;i<errors.length;i++){ 
      document.getElementById(errors[i]).style.display="inline"; 
     } 
     return false; 
    }else{ 
     return true 
    } 
    } 
} 
+0

謝謝詹姆斯,作品一種享受! – dimma415

+0

如果我有另一個功能,將默認文本輸入到字段中,這仍然有效嗎?例如功能textHint(){VAR = defaultText 「請輸入您的名字」; VAR txtElem =的document.getElementById(其中 「fname」); txtElem.value = defaultText; txtElem.style.color =「#A8A8A8」; txtElem.style.fontStyle =「italic」; – dimma415

+0

哦,你想在錯誤發生時添加「提示」? –