Javascript onsubmit无法正常工作?

时间:2016-07-15 07:44:06

标签: javascript html

我制作了这样的html表单,由于某种原因,即使我使用onsubmit,表单仍然会被提交。 handleError()函数应该将变量flawless设置为false,如果发生错误并且如果flawless是false document.myForm.onsubmit也应该设置为false并且表单不应该被提交。我非常困惑,一遍又一遍地看着它,我找不到任何错误。 Chrome调试器说这么笨蛋没有什么问题......我住的地方上午9:40所以我为我所做的每一个错字道歉

<!DOCTYPE html>
<html lang="en">
    <head>
            <title>Sign Up</title>
            <meta charset="UTF-8">
            <style>
                    #error {color:red}
                    #birthday {float:left}
            </style>
    </head>
    <body>
            <h2>Sign Up</h2>
            <h6 class="error">* requierd</h6>
            <div>
                    <form action="process_data.php" method="POST" name="myForm" onsubmit="">
                            <table border="0">
                                    <tr>
                                            <td>Name:</td>
                                            <td><input type="text" id="name" name="Name" maxlength="20" pattern="/^[A-Za-z ]+$/" placeholder="Your name"><span id="name_error" class="error"> * </span></td>
                                    </tr>
                                    <tr>
                                            <td>E-Mail:</td>
                                            <td><input type="text" id="email" name="E-Mail" pattern="/^(([^<>()\[\]\\.,;:\s@']+(\.[^<>()\[\]\\.,;:\s@']+)*)|('.+'))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/" placeholder="Your E-Mail adress"><span id="email_error" class="error"> * </span></td>
                                    </tr>
                                    <tr>
                                            <td>Password:</td>
                                            <td><input type="password" id="pw" name="Password" minlength="8" maxlength="63" placeholder="Your password"><span id="pw_error" class="error"> * </span></td>
                                    </tr>
                                    <tr>
                                            <td>Confirm Password:</td>
                                            <td><input type="password" id="cpw" name="Confirm Password" minlength="8" maxlength="63" placeholder="Confirm your password"><span id="cpw_error" class="error"> * </span></td>
                                    </tr>
                                    <tr>
                                            <td>Username:</td>
                                            <td><input type="text" id="username" name="Username" pattern="/^[A-Za-z ]+$/" minlength="4" maxlength="20" placeholder="Your username"><span id="username_error" class="error"> * </span></td>
                                    </tr>
                                    <tr>
                                            <td>Bio:</td>
                                            <td><textarea rows="5" cols="40" id="bio" name="Bio" maxlength="120" placeholder="Something about you"></textarea></td>
                                    </tr>
                                    <tr>
                                            <td>Location:</td>
                                            <td><input type="text" id="loc" name="Location" pattern="/^[A-Za-z ]+$/" placeholder="Where are you from"></td>
                                    </tr>
                                    <tr>
                                            <td>Website:</td>
                                            <td><input type="text" id="url" name="URL" pattern="/^(http[s]?:\/\/){0,1}(www\.){0,1}[a-zA-Z0-9\.\-]+\.[a-zA-Z]{2,5}[\.]{0,1}/" placeholder="Your website"></td>
                                    </tr>
                                    <tr>
                                            <td>Birthday:</td>
                                            <td>
                                                    <div id="birthday">
                                                            <input type="number" min="1" size="2" max="31" id="dob" name="Day of birth" placeholder="day">
                                                            <input type="number" size="2" min="1" max="12" id="mob" name="Month of birth" placeholder="month">
                                                            <input type="number" size="4" min="1900" id="yob" name="Year of birth" placeholder="year"><span id="date_error" class="error"> * </span>
                                                    </div>
                                            </td>
                                    </tr>
                                    <tr>
                                            <td><input type="submit" id="submit" value="Submit"></td>
                                    </tr>
                            </table>
                    </form>
            </div>
    <script>
    function handleError(element) {
            var x = element.value, xl = element.value.length;
            var min = element.min, minl = element.minlength;
            var max = element.max, maxl = element.maxlength;
            var cpw = document.getElementById('cpw').value;
            var pw = document.getElementById('pw').value;
            var y = element.name, flawless = true;

        try {
            //Name:
                if (y == "Name") {
                                    if (x == "") throw y + " can't be empty!";
                                    if (xl > maxl) throw y + " must have less than 20 characters!";
                    }
            //E-Mail:
                    else if (y == "E-Mail") {
                                    if (x == "") throw y + " can't be empty!";
                    }
            //Password:
                    else if (y == "Password") {
                            if (x == "") throw y + "input field is still empty!";
                            if (x != cpw) throw "Passwords have to match!";
                            if (xl < minl) throw y + " must have alteast 8 characters!";
                            if (xl > maxl) throw y + " must have less than 63 characters!";
                    }
            //Confirm PW:
                    else if (y == "Confirm Password") {
                            if (x == "") throw y + "input field is still empty!";
                            if (x != pw) throw "Passwords have to match!";
                            if (xl < minl) throw y + " must have alteast 8 characters!";
                            if (xl > maxl) throw y + " must have less than 63 characters!";
                    }
            //Username:
                    else if (y == "Username") {
                            if (x == "") throw y + " is still empty!";
                            if (xl < minl) throw y + " must have alteast 4 characters!";
                            if (xl > maxl) throw y + " must have less than 20 characters!";
                    }
            //Bio:
                    else if (y == "Bio") {
                            if (xl > maxl) throw y + " must have less than 20 characters!";
                    }
            //Birthday:
                    else if (y == "Day of birth") {
                            if (x == "") throw y + " is still empty!";
                            if (x < min) throw y + " is too low!";
                            if (x > max) throw y + " is too high!";
                    }
                    else if (y == "Month of birth") {
                            if (x == "") throw y + " is still empty!";
                            if (x < min) throw y + " is too low!";
                            if (x > max) throw y + " is too high!";
                    }
                    else if (y == "Year of birth") {
                            if (x == "") throw y + " is still empty!";
                            if (x < min) throw y + " is too low!";
                            if (x > max) throw y + " is too high!";
                    }
            }
            catch(err) {
                    switch (y) {
                            case "Name":
                                    document.getElementById('name_error').innerHTML += err;
                                    flawless = false;
                                    break;

                            case "E-Mail":
                                    document.getElementById('email_error').innerHTML += err;
                                    flawless = false;
                                    break;

                            case "Password":
                                    document.getElementById('pw_error').innerHTML += err;
                                    flawless = false;
                                    break;

                            case "Confirm Password":
                                    document.getElementById('cpw_error').innerHTML += err;
                                    flawless = false;
                                    break;

                            case "Username":
                                    document.getElementById('username_error').innerHTML += err;
                                    flawless = false;
                                    break;

                            case "Bio":
                                    document.getElementById('bio_error').innerHTML += err;
                                    flawless = false;
                                    break;

                            case "Day of birth" || "Month of birth" || "Year of birth":
                                    document.getElementById('date_error').innerHTML += err + " | ";
                                    flawless = false;
                                    break;

                            default:
                                    //code block
                    }
            }
            finally {
                    x = "";
            }
            if (!flawless) document.myForm.onsubmit = false;
    }

    var today = new Date();
    var year = today.getFullYear();
    document.getElementById('name').onchange = handleError(this);
    document.getElementById('pw').onchange = handleError(this);
    document.getElementById('cpw').onchange = handleError(this);
    document.getElementById('username').onchange = handleError(this);
    document.getElementById('bio').onchange = handleError(this);
    document.getElementById('dob').onchange = handleError(this);
    document.getElementById('mob').onchange = handleError(this);
    document.getElementById('yob').onchange = handleError(this);
    document.getElementById('yob').max = year;
    </script>
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

由于重写会有很多工作,只需更改

即可
if (!flawless) document.myForm.onsubmit = false;

 document.myForm.onsubmit = flawless?null:function() {return false}

并且

window.onload=fuction() {
  document.myForm.onsubmit = function() {return false}
}

如果没有任何更改,则停止立即提交,即点击提交按钮而不输入任何内容