JavaScript表单验证

时间:2014-09-08 13:28:41

标签: javascript jsp validation

我正在JSP中进行一些表单验证,点击提交按钮" validate_access()"函数未被调用或无法正常工作。有时这个功能显示一个alret box然后停止做任何事情。请告诉我这段代码有什么问题。这是一段代码:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Data management system</title>

    <script language="JavaScript" type="text/javascript">

            function validate_access()
        {
              var a = document.forms["myForm1"]["MISDN"].value;
              var b = document.forms["myForm1"]["Issue"].value;
              var c = document.forms["myForm1"]["SR"].value;
              var d = document.forms["myForm1"]["date"].value;
              var numbers = /^[0-9]+$/;
              var alpha= /^[a-zA-Z]+$/;
              var Datee= /^\d{1, 2}\/\d{1, 2}\/\d{4}$/;
            if(document.myform1.MISDN.value=="" && document.myform1.Issue.value=="" && document.myform1.SR.value=="" && document.myform1.date.value=="")
            {
              alert("Manadotry fields should not left blank");
              document.myform1.MISDN.focus();
              document.myform1.Issue.focus();
              document.myform1.SR.focus();
              document.myform1.date.focus();
              return false;
            }
            else if(!a.value.match(numbers))
            {
                 alert('Please input numeric characters only');  
                 document.myform1.MISDN.focus();
                 return false;
            }
            else if(!(b.value.match(numbers) && b.value.match(alpha)))   
            {  
                  alert('Please input numeric and alphabets only');  
                  document.myform1.Issue.focus();
                  return false; 
            }  
            else if(!c.value.match(numbers))  
            {
                  alert('Please input numeric characters only');  
                  document.myform1.SR.focus();
                  return false;

            }
            else if(!d.value.match(Datee))
            {
                  alert('Please input correct date');  
                  document.myform1.date.focus();
                  return false;
            }
            else
                return true;


        }


    </script>
</head>
<body>
 <div class="main">
     <div class="header"></div>
     <div class="continer">
         <div class="myform1" style="height:200px; width:300px; float:left;">
            <h2>1344 Access</h2>
            <form name="myform1" action="access.jsp" method="get" onsubmit="return validate_access()">
                <br/>MSISDN:<input type="text" name="MISDN" maxlength="11">
                <br/>Issue:<input type="text" name="Issue" maxlength="13">
                <br/>SR:<input type="text" name="SR">
                <br/>Date:<input type="text" name="date" value="dd/mm/yy">
                <br/><input type="submit" value="Submit">
                <br/><input type="reset" name="Reset">

            </form>
        </div>
        <div class="myform2" style="float:left;height:200px; width:300px;">
            <h2>O.C.S</h2>
            <form name="myform2" action="ocs.jsp" method="post" onsubmit="return validate_ocs()">
                <br/>MSISDN:<input type="text" name="MISDN" maxlength="11">
                <br/>SR:<input type="text" name="SR">
                <br/>REASON:<input type="text" name="reason">
                <br/><input type="submit" value="Submit">
                <br/><input type="reset" name="Reset">
            </form>
        </div>    
     </div>
 </div>



</body>

3 个答案:

答案 0 :(得分:1)

您的javascript中的问题是:

  • 第一个if条件检查错误,你的意思是||代替&&
  • 然后当你在空字符串上调用match方法时,错误可能会像:

    Uncaught TypeError: Cannot read property 'match' of undefined

  • 您持续致电.focus()但没有任何意义,请通过条件检查致电一次。

答案 1 :(得分:0)

这一行有问题:var a = document.forms [&#34; myForm1&#34;] [&#34; MISDN&#34;]。value; 查看您的源代码,您的表单名称是&#34; myform1&#34;不是&#34; myForm1&#34;。

答案 2 :(得分:0)

JavaScript区分大小写http://en.wikipedia.org/wiki/JavaScript_syntax

在你的js中:

document.forms["myForm1"]

但是你的表格(html)是:

<form name="myform1"

试试这个:

function validate_access()
{
    var a = document.forms["myForm1"]["MISDN"].value;
    var b = document.forms["myForm1"]["Issue"].value;
    var c = document.forms["myForm1"]["SR"].value;
    var d = document.forms["myForm1"]["date"].value;

    var numbers = /^[0-9]+$/;
    var alpha= /^[a-zA-Z]+$/;
    var Datee= /^\d{1, 2}\/\d{1, 2}\/\d{4}$/;           

    if(a == "" && b == "" && c == "" && d == "")
    {  //as you have default value for d (date field), this condition will never match;
       //either you can remove default value or provide different logic
        alert("Manadotry fields should not left blank");
        document.myForm1.MISDN.focus();
        document.myForm1.Issue.focus();
        document.myForm1.SR.focus();
        document.myForm1.date.focus();
        return false;
    }
    else if(a == "" && !a.match(numbers))
    {
        alert('Please input numeric characters only');  
        document.myForm1.MISDN.focus();
        return false;
    }
    else if(!(b.match(numbers) && b.match(alpha)))   
    {  
        alert('Please input numeric and alphabets only');  
        document.myForm1.Issue.focus();
        return false; 
    }  
    else if(!c.match(numbers))  
    {
        alert('Please input numeric characters only');  
        document.myForm1.SR.focus();
        return false;
    }
    else if(!d.match(Datee))
    {
        alert('Please input correct date');  
        document.myForm1.date.focus();
        return false;
    }
    else
        return true;    
}

你的错误:

(i)表格拼写错误(caseSensitive)

(ii)您使用HTMLElement.value.value来检查(如果是条件)

For example:
   var a = document.forms["myForm1"]["MISDN"].value;    
   a.value.match(numbers);   // it simply means  HTMLElement.value.value (which will never work)