You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决JavaScript中注册表单持续弹出提示框的问题?

搞定注册表单持续弹邮箱提示的问题啦!

嘿,我帮你排查了这个输入正确手机号后,一直弹“邮箱无效”提示框的问题,主要是几个小bug在搞鬼,咱们一步步来修复:

问题到底出在哪?

  1. HTML标签写混了导致DOM混乱
    你注册表单里的标题写成了<h2>Register</h1>,h2开标签配h1闭标签,浏览器解析DOM时会乱套,可能引发焦点莫名其妙地来回跳,反复触发邮箱输入框的onBlur事件,自然就一直弹提示了。

  2. 表单提交没做整体验证,还没阻止默认行为
    点击注册按钮时,表单直接就提交了,要是邮箱还空着,onBlur事件就会触发,而且因为没阻止默认提交,页面可能在提交-刷新的循环里,提示框就停不下来。

  3. 邮箱验证没判断空值
    现在只要邮箱输入框失去焦点,不管有没有输入内容,都会跑验证逻辑,空字符串肯定过不了正则,直接弹提示,太霸道啦。

  4. 重复ID埋隐患
    登录和注册表单里都有id="text2"的元素,getElementById只会找第一个,后续逻辑很容易出错,虽然不是这次问题的直接原因,但也得改。


修复后的完整代码

我把所有问题都修正了,还加了一些优化,代码里标了关键修改点:

<!DOCTYPE html>
<html>
<head>
    <title>Login-Form</title>
    <style>
        h3{
            padding: 10px;
            background-color: Cyan;
            color: Red;
            font-size: 20px; /* 把非标准的size改成font-size */
        }
        .log-in{
            padding: 50px;
            background-image: url("login.png");
            float: left; /* 替换align为标准的float属性 */
            color: Cyan;
            background-repeat: no-repeat;
            background-color:black;
        }
        .Register{
            padding: 50px;
            background-image: url("reg.png");
            float: right; /* 替换align为float */
            color: Yellow;
            background-repeat: no-repeat;
            background-color:black;
        }
        /* 加个清除浮动的类,避免页面布局乱掉 */
        .clearfix::after {
            content: "";
            display: table;
            clear: both;
        }
    </style>
</head>
<body>
    <div>
        <marquee><center><h3>Welcome To LIFOA Mobile-APP</h3></center></marquee>
        <form class="log-in" method="post">
            <table>
                <b>
                    <tr>
                        <td><h1>LOGIN PAGE</h1><br><br><br></td>
                        <td>USER NAME</td>
                        <td>:</td>
                        <!-- 把重复的ID改成唯一的login_username -->
                        <td><input type="text" placeholder="Username" id="login_username" name="un" onBlur="checkuser()"/></td><br /><br><br>
                        <td><span id="user_status" style="color:Red ;font-weight:400"></span></td>
                    </tr>
                    <tr>
                        <td>PASSWORD</td>
                        <td>:</td>
                        <!-- 改成唯一的login_password -->
                        <td><input type="password" name="pw" placeholder="Password" id="login_password"/></td><br /><br><br>
                        <!-- 修复之前span标签嵌套错误的问题 -->
                        <td><span id="passw_status" style="color:Red ;font-weight:400"></span></td>
                    </tr>
                </b>
            </table>
            <!-- 加return阻止默认提交行为 -->
            <input type="submit" value="Login" onclick="return validate()" />
        </form>
    </div>
    <!-- 加clearfix清除浮动,避免布局重叠 -->
    <div class="clearfix">
        <!-- 绑定表单提交验证函数,只有验证通过才允许提交 -->
        <form action="..." class="Register" method="get" onsubmit="return validateRegister()">
            <b>
                <!-- 修复h2标签闭合错误 -->
                <center><h2>Register</h2><br><br><br>
                    NAME: <input type="text" placeholder="Enter Name" id="reg_name" />
                    <br /><br><br>
                    <label>Enter phone number (e.g. 1234567890):
                        <!-- 改成唯一的reg_mobile -->
                        <input type="text" placeholder="Mob Number" id="reg_mobile" name="Mobile" onBlur="checkPhoneNo(this.value);" />
                    </label>
                    <br /><br><br>
                    <label>Enter mail ID:
                        <!-- 改成唯一的reg_email -->
                        <input type="text" placeholder="Enter Email" id="reg_email" name="mail" onBlur="ValidateEmail(this.value);" />
                    </label><br /><br><br>
                    Gender : <br>
                    <!-- 给单选按钮加name属性,确保只能选一个 -->
                    <input type="radio" value="male" name="gender">Male
                    <br>
                    <input type="radio" value="female" name="gender">FeMale
                    <br>
                    <input type="radio" value="other" name="gender">Other
                    <br><br>
                    Password: <input type="password" placeholder="Enter Password" id="reg_password" /><br /><BR><BR>
                    Confirm Password: <input type="password" placeholder="Confirm the password" id="reg_confirm_password" /><br /><br><br>
                    <input type="submit" value="Register" />
                </center>
            </b>
        </form>
    </div>

    <script type="text/javascript">
        // 手机号验证函数,加了空值判断
        function checkPhoneNo(phoneNo) {
            // 简化正则写法,效果一样
            var phoneRE = /^\d{10}$/;
            if (phoneNo.trim() === "") {
                alert("请先输入手机号哦");
                return false;
            }
            if (phoneRE.test(phoneNo)) {
                alert("号码有效👍");
                return true;
            } else {
                alert("手机号格式不对,请输入10位纯数字");
                return false;
            }
        }

        // 邮箱验证函数,空值时不弹提示
        function ValidateEmail(mail) {
            var mailRE = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/;
            // 空值时暂时不验证,用户还没输入呢
            if (mail.trim() === "") {
                return true;
            }
            if (mailRE.test(mail)) {
                return true;
            } else {
                alert("你输入的邮箱地址无效哦,请检查格式");
                return false;
            }
        }

        // 登录用户名验证,输入后恢复正常样式
        function checkuser() {
            var usernameInput = document.getElementById("login_username");
            if (usernameInput.value.trim() === "") {
                usernameInput.style.border = "1px solid #ff0000";
                document.getElementById('user_status').innerHTML = "请输入用户名";
            } else {
                usernameInput.style.border = "";
                document.getElementById('user_status').innerHTML = "";
            }
        }

        // 修复原登录密码验证的逻辑错误
        function checkpass() {
            var passwordInput = document.getElementById("login_password");
            if (passwordInput.value.trim() === "") {
                passwordInput.style.border = "1px solid #ff0000";
                document.getElementById('passw_status').innerHTML = "请输入密码";
                alert("请输入密码");
            } else {
                passwordInput.style.border = "";
                document.getElementById('passw_status').innerHTML = "";
            }
        }

        // 登录表单验证,加return false阻止默认提交
        function validate() {
            var username = document.getElementById("login_username").value;
            var password = document.getElementById("login_password").value;
            if (username === "Suganth" && password === "6213") {
                alert("验证成功!马上跳转");
                location.href = "second.html";
                return false;
            } else {
                alert("用户名或密码不对哦");
                location.href = "first.html";
                return false;
            }
        }

        // 新增注册表单整体验证,所有条件满足才允许提交
        function validateRegister() {
            var name = document.getElementById("reg_name").value;
            var mobile = document.getElementById("reg_mobile").value;
            var email = document.getElementById("reg_email").value;
            var password = document.getElementById("reg_password").value;
            var confirmPwd = document.getElementById("reg_confirm_password").value;

            // 逐个检查必填项
            if (name.trim() === "") {
                alert("请输入你的姓名");
                return false;
            }
            if (!checkPhoneNo(mobile)) {
                return false;
            }
            if (!ValidateEmail(email)) {
                return false;
            }
            if (password.trim() === "") {
                alert("请设置密码");
                return false;
            }
            if (password !== confirmPwd) {
                alert("两次输入的密码不一样哦");
                return false;
            }

            // 所有验证通过,提交表单
            alert("注册信息没问题啦,马上提交!");
            return true;
        }
    </script>
</body>
</html>

改了啥重点?

  1. 修好了DOM结构问题:把写错的标签、嵌套错误都改了,页面解析正常了,焦点就不会乱跳了。
  2. 加了表单整体验证:注册时要先过一遍所有必填项的验证,过了才允许提交,还阻止了默认提交行为,不会随便刷新页面。
  3. 优化了验证逻辑:空输入时不再弹提示,用户体验更好;错误提示也更明确。
  4. 修复了重复ID:每个元素的ID都唯一,不会出现选DOM元素出错的情况。
  5. 优化了布局:用标准的float替换了非标准的align,加了清除浮动,页面布局不会乱。

内容的提问来源于stack exchange,提问作者Suganth S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:01:28