0

在填写 3 / 7 个表单字段后按提交时出现无限循环。我填写名字和姓氏,以及电子邮件地址。

这是我怀疑无限循环来自的函数:

function runValidation()
{
    // Element Variables
    var name_first = document.forms[0].elements["name_first"];
    var name_last = document.forms[0].elements["name_last"];
    var address_email = document.forms[0].elements["address_email"];
    var address_number = document.forms[0].elements["address_number"];
    var address_postal = document.forms[0].elements["address_postal"];
    var url_link = document.forms[0].elements["other_website"];
    var user_age = document.forms[0].elements["other_age"];

    // Arrays of elements and functions
    var userVariables = new Array(name_first, name_last, address_email, address_number, address_postal, url_link, user_age);    
    var userFunctions = new Array(valName, valName, valEmail, valNum, valCode, valLink, valAge);
    var userFuncExec = new Array();

    for (i = 0; i < userVariables.length - 1; i++)
    {
        userFuncExec[i] = userFunctions[i](userVariables[i]);

        if ( userFuncExec[i] == false )
        {       
            userVariables[i].value = "";
            userVariables[i].focus();
            return false;
        }
    }

    // If the function has not returned false , then the form is valid;
    document.forms[0].submit();

}

这是整个 .js 文件:

http://pastie.org/5563532

// This is the validation for the contact form of Exquisite Taste
var debugOn = true; // toggles debug alerts.

function runValidation()
{
    // Element Variables
    var name_first = document.forms[0].elements["name_first"];
    var name_last = document.forms[0].elements["name_last"];
    var address_email = document.forms[0].elements["address_email"];
    var address_number = document.forms[0].elements["address_number"];
    var address_postal = document.forms[0].elements["address_postal"];
    var url_link = document.forms[0].elements["other_website"];
    var user_age = document.forms[0].elements["other_age"];

    // Arrays of elements and functions
    var userVariables = new Array(name_first, name_last, address_email, address_number, address_postal, url_link, user_age);    
    var userFunctions = new Array(valName, valName, valEmail, valNum, valCode, valLink, valAge);
    var userFuncExec = new Array();

    for (i = 0; i < userVariables.length - 1; i++)
    {
        userFuncExec[i] = userFunctions[i](userVariables[i]);

        if ( userFuncExec[i] == false )
        {       
            userVariables[i].value = "";
            userVariables[i].focus();
            return false;
        }
    }

    // If the function has not returned false , then the form is valid;
    document.forms[0].submit();

}

function valName(nam)
{
    // This validates whatever name is passed.

    if(nam.value.length > 1)
    {
        if(debugOn)
            alert("Name is valid");
        return true;
    }else{

        alert("Please enter a name that is at least 2 characters long.");
        return false;
    }
}

function valEmail(email)
{
    // This function checks to see if the email address entered is valid.


    // Check if the email field is less than 10 characters ( 3@3.2-3 = 10 - 11 characters for the shortest email address)

    if ( email.value.length < 10 )
    {
        alert("Your email is too short to be valid.")
        return false;
    }

    // Check to see the email has at least one period and one @ symbol

    if ( email.value.indexOf(".") < 0 || email.value.indexOf("@") < 0)
    {
        alert("The format of your email is invalid. All emails require a '.' and a '@'");
        return false;
    }

    // Check if the last index of the '.' is after the '@' symbol & make sure there is only one index of '@'

    if ( email.value.lastIndexOf(".") < email.value.indexOf("@") || email.value.indexOf("@") != email.value.lastIndexOf("@") )
    {   
        alert("Your email is invalid and may have too many @ symbols or have them in the wrong place");
        return false;
    }

    // Check to see that the index of the last '.' has at least two characters after it.

    if ( email.value.lastIndexOf(".") > email.value.length-3 )
    {
        alert("Your top level domain has to be at least 2 characters");
        return false;       
    }

    // Check to see if the split array has at least 3 characters in each section except for the last (TLD).

    var email_attributes = new Array();
    var email_attributes = email.value.split("."); // tiessen-b@webmail.uwinnipeg.ca

    for ( i = 0; i < email_attributes.length - 2; i++ ) // -2 = (-1 so length = index; and -1 so the last section isn't included.)
    {
        // If one of the characters in the array value is '@' and the string length is < 3 then it isn't long enough.
        if ( email_attributes[i].indexOf("@") > -1 )
        {
            // If the length of the string - 1 (for the '@') symbol is not considered a valid symbol.
            if ( ( email_attributes[i].length - 1 ) < 3 )
            {
                alert("Your email doesn't have a long enough section");
                return false;
            }

        }

    }

    // If it got this far it is probably a valid email address.
    alert("Your email is valid!");
    return true;

}

function valNum(num)
{
    // This function validates a 10 or 12 digit phone number

    var isNum = /[0-9]/; // If the value is a number

    // Check to see if the number length is either 10 or 12
    if ( num.value.length == 10 || num.value.length == 12)
    {
        // Make sure every character is a number.
        for (i = 0; i < num.value.length; i++)
        {
            if ( !isNum.test( num.value.charAt(i) ) )
            {
                alert("You have entered an invalid number.");
                return false;
            }
        }
    }

    else if ( num.value.length == 12 )
    {
        // split all numbers into an array with a delimiter of '-'
        var numbers = num.value.split("-");

        // check if the array length is not 3 or has 4 digits in the last section
        if ( numbers.length != 3 || numbers[0].length > 3 || numbers[1].length > 3 );
        {
            alert("Your number is not formatted correctly. Make sure it is formatted like this: 204-290-9611.");
            return false;
        }

        // loop through each section of the numbers array and make sure they are all numbers

        for ( l = 0; l < numbers.length - 1; l++ )
        {
            for ( i = 0; i < numbers[l].length; i++)
            {
                if ( !isNum.test(numbers[l].charAt(i)) )
                {
                    alert("Your phone number has invalid characters");
                    return false;
                }
            }
        }
    }else{

        alert("Phone number is invalid");
        return false;
    }
        if(debugOn)
            alert("Phone number is invalid");
        return true;    
}

function valCode(code)
{
    // This function validates a postal code.

    var valid = true;
    var isChar = /[A-z]/;
    var isNum = /[0-9]/;

    // Make sure the postal code is 6 characters long.
    if( code.value.length != 6)
    {
        alert("Please enter a 6 digit/character postal code");
        return false;

    }else{

        if ( !isChar.test( code.value.charAt(0) ) )
            valid  = false;
        if ( !isNum.test( code.value.charAt(1) ) )
            valid  = false;
        if ( !isChar.test(  code.value.charAt(2) ) )
            valid  = false;
        if ( !isNum.test( code.value.charAt(3) ) )
            valid  = false;
        if ( !isChar.test( code.value.charAt(4) ) )
            valid  = false;
        if ( !isNum.test( code.value.charAt(5) ) )
            valid  = false;

        if (valid)
        {
            if(debugOn)
                alert("Postal Code is valid");
            return true;
        }else{
            alert("Your Postal Code is formatted incorrectly.");
            return false;       
        }
    }

}

function valLink(link)
{

    if(link.value.length > 0)
    {
        linkParts = link.value.split(".");
        if ( linkParts[0] == "www" || linkParts[0] == "http://www")
        {
            if( linkParts[linkParts.length-1].length < 2 || linkParts.length < 3)
            {
                alert("Invalid domain");
                focusEmpty(link);
            }else{
                return true;
            }
        }else{
            alert("invalid host");
            focusEmpty(link);
        }
    }else{
        return true;
    }
}

function valAge(age)
{
    // This function validates the users age.
    var parsedAge = parseInt(age.value, 10);

    if( age.value.length > 0 )
    {
        if(  isNaN(parsedAge) )
        {
            alert("invalid age");
            focusEmpty(age);

        }else{

            if(age.value < 1 || age.value > 125)
            {
                alert("Is that your real age? Please try again...");
                focusEmpty(age);

            }else{
                return true;
            }
        }
    }else{
        // If the user doesn't submit anything return true and validate (Age is optional).
        if(debugOn)
            alert("Age is empty but valid.");
        return true;
    }
}

这是 HTML 表单的代码:

<form method="post" enctype="text/plain" action="http://www.cs.tut.fi/cgi-bin/run/~jkorpela/echo.cgi" name="contactForm">

                <div>
                  <p>First Name:</p>
                  <input name="name_first" type="text" />
                </div>
                <div>
                  <p>Last Name:</p>
                  <input name="name_last" type="text" />
                </div>
                <div>
                  <p>Email Address:</p>
                  <input name="address_email" type="text" />
                </div>
                <div>
                  <p>Phone Number:</p>
                  <input name="address_number" type="text" />
                </div>
                <div>
                  <p>Postal Code:</p>
                  <input name="address_postal" type="text" />
                </div>
                <div>
                  <p>Website:</p>
                  <input name="other_website" type="text" />
                </div>
                <div>
                  <p>Age:</p>
                  <input name="other_age" type="text" />
                </div>
                <div style="text-align:right; margin-right:20px;">
                  <input name="submit" type="button" value="Send" onclick="runValidation();"/>
                </div>
              </form>

为什么我得到一个无限循环?

4

1 回答 1

0

for (var i = 0;...在循环定义中使用而不是for (i = 0.

javascript 中的变量范围可能很难理解。JavaScript 中变量的作用域是什么?有一个很好的解释。

于 2012-12-22T04:57:49.213 回答