JavaScript未在第二次提交请求中验证表单

时间:2013-10-04 09:12:41

标签: javascript forms validation

我有JavaScript代码将在第一个提交请求中验证表单,但如果用户再次点击提交,即使他们没有纠正表单错误,表单也不会处理验证功能,只会提交。

我希望每次用户点击提交按钮时都会执行验证功能。

感谢您提供任何帮助,以下代码。 马丁

<form action="site.url" method="post" name="signup" onsubmit="return validateForm()"> 
    <label for="firstname"><span id="inactiveErrorFname">Please enter your first name<br></span>
        First name <strong title="Required" class="required">*</strong></label><br>
    <input type="text" name="firstName">
    <label for="surname"><br><span id="inactiveErrorSname">Please enter your Surname<br></span>
        Surname</label><input type="text" name="lastName">  
    <label for="email">
        <span id="inactiveErrorEmail"><br>Please enter your Email address<br></span>
        Email address <strong title="Required" class="required">*</strong></label>
    <input type="text" name="emailAddress">
    <input class="button" type="submit" value="Sign up" />    
</form>

<script>

    function validateForm()
    {
        var x=document.forms["signup"]["firstName"].value;
        var y=document.forms["signup"]["lastName"].value;
        var z=document.forms["signup"]["emailAddress"].value;
        var atpos=z.indexOf("@");
        var fname;
        var sname;
        var email;

        /* Validate first name */
        if (x==null || x=="")
        {
            document.getElementById("inactiveErrorFname").id = "activeErrorFname";
            fname = "true";
        }
        /* Validate Surname */
        if (y==null || y=="")
        {
            document.getElementById("inactiveErrorSname").id = "activeErrorSname";
            sname = "true";
        }
        /* Validate email */
        if (atpos<1)
        {
            document.getElementById("inactiveErrorEmail").id = "activeErrorEmail";
            email = "true";
        }
        if (fname=="true" || sname=="true" || email =="true")
        {
            return false;
        }
    }

</script>

1 个答案:

答案 0 :(得分:0)

您面临的问题是由您更改某些元素的ID而产生的。第一次运行代码时,会成功运行这些语句:

document.getElementById("inactiveErrorFname").id = "activeErrorFname";
document.getElementById("inactiveErrorSname").id = "activeErrorSname";
document.getElementById("inactiveErrorEmail").id = "activeErroremail";

然而,第二次这些元素的id已经改变,导致这些陈述要求不存在的元素。这导致javascript致命错误,因此没有return false。第二次您的表格将按照通常情况提交。这个问题的解决方案不是改变id,而是改变错误标签的类。您可以在this fiddle中找到一个示例。

<强> HTML:

<form action="#" method="post" name="signup" onsubmit="return validateForm()"> 
    <label for="firstname">
      <span class="inactive" id="errorFname">Please enter your first name<br></span>
      First name <strong title="Required" class="required">*</strong>
    </label><br>
    <input type="text" name="firstName"><br><br>

    <label for="surname">
      <span class="inactive" id="errorSname">Please enter your Surname<br></span>
      Surname
    </label><br>
    <input type="text" name="lastName"><br><br>

    <label for="email">
        <span class="inactive" id="errorEmail"><br>Please enter your Email address<br></span>
        Email address <strong title="Required" class="required">*</strong>
    </label><br>
    <input type="text" name="emailAddress"><br><br>

    <input class="button" type="submit" value="Sign up" />    
</form>

<强>使用Javascript:

function validateForm()
{
    var x=document.forms["signup"]["firstName"].value;
    var y=document.forms["signup"]["lastName"].value;
    var z=document.forms["signup"]["emailAddress"].value;
    var atpos=z.indexOf("@");
    var fname;
    var sname;
    var email;

    /* Validate first name */
    if (x==null || x=="")
    {
        document.getElementById("errorFname").className = "active";
        fname = "true";
    }
    /* Validate Surname */
    if (y==null || y=="")
    {
        document.getElementById("errorSname").className = "active";
        sname = "true";
    }
    /* Validate email */
    if (atpos<1)
    {
        document.getElementById("errorEmail").className = "active";
        email = "true";
    }
    if (fname=="true" || sname=="true" || email =="true")
    {
        return false;
    }
    return false;
}