2014-01-11 86 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

哦,你想在错误发生时添加“提示”? –