• 表单验证(用户名、密码、邮箱、手机号)
  • 密码强度检测
  • 实时验证反馈
  • 表单提交
  • 友好的错误提示

最终效果预览


第一步:HTML 结构

这是注册表单的骨架,我们使用一个 div 作为容器,内部包含各种输入字段和提示信息。

jquery 注册模板
(图片来源网络,侵删)
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">jQuery 用户注册</title>
    <!-- 引入 CSS 文件 -->
    <link rel="stylesheet" href="style.css">
    <!-- 引入 jQuery 库 -->
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
</head>
<body>
    <div class="container">
        <h1>用户注册</h1>
        <form id="registrationForm" novalidate>
            <div class="form-group">
                <label for="username">用户名</label>
                <input type="text" id="username" name="username" placeholder="请输入用户名 (4-16位字母或数字)">
                <div class="error-message" id="username-error"></div>
            </div>
            <div class="form-group">
                <label for="email">电子邮箱</label>
                <input type="email" id="email" name="email" placeholder="请输入您的电子邮箱">
                <div class="error-message" id="email-error"></div>
            </div>
            <div class="form-group">
                <label for="phone">手机号码</label>
                <input type="tel" id="phone" name="phone" placeholder="请输入您的手机号码">
                <div class="error-message" id="phone-error"></div>
            </div>
            <div class="form-group">
                <label for="password">密码</label>
                <input type="password" id="password" name="password" placeholder="请输入密码 (至少8位,包含字母和数字)">
                <div class="password-strength">
                    <div class="strength-bar"></div>
                </div>
                <div class="error-message" id="password-error"></div>
            </div>
            <div class="form-group">
                <label for="confirm-password">确认密码</label>
                <input type="password" id="confirm-password" name="confirm-password" placeholder="请再次输入密码">
                <div class="error-message" id="confirm-password-error"></div>
            </div>
            <button type="submit" id="submitBtn">注册</button>
        </form>
    </div>
    <!-- 引入 JS 文件 -->
    <script src="script.js"></script>
</body>
</html>

关键点:

  • novalidate: 这个属性可以阻止浏览器默认的、有时不够美观的验证提示,让我们完全用 jQuery 来控制验证逻辑。
  • id: 每个输入框和错误提示 div 都有唯一的 id,方便 jQuery 精准选择和操作。
  • class: 使用 class (如 form-group, error-message) 来应用通用的样式。

第二步:CSS 样式

为了让表单看起来美观且用户友好,我们添加一些 CSS 样式。

/* style.css */
body {
    font-family: 'Arial', sans-serif;
    background-color: #f4f7f6;
    display: flex;
    justify-content: center;
    align-items: center;
    height: 100vh;
    margin: 0;
}
.container {
    background-color: #ffffff;
    padding: 2rem;
    border-radius: 8px;
    box-shadow: 0 4px 15px rgba(0, 0, 0, 0.1);
    width: 100%;
    max-width: 400px;
}
h1 {
    text-align: center;
    color: #333;
    margin-bottom: 1.5rem;
}
.form-group {
    margin-bottom: 1.2rem;
}
label {
    display: block;
    margin-bottom: 0.5rem;
    color: #555;
    font-weight: bold;
}
input[type="text"],
input[type="email"],
input[type="tel"],
input[type="password"] {
    width: 100%;
    padding: 0.8rem;
    border: 1px solid #ccc;
    border-radius: 4px;
    box-sizing: border-box; /* 确保 padding 不会影响宽度 */
    transition: border-color 0.3s;
}
input:focus {
    outline: none;
    border-color: #007bff;
    box-shadow: 0 0 5px rgba(0, 123, 255, 0.5);
}
/* 错误状态样式 */
input.error {
    border-color: #dc3545;
}
.error-message {
    color: #dc3545;
    font-size: 0.85rem;
    margin-top: 0.3rem;
    min-height: 1.2em; /* 防止布局抖动 */
    display: none; /* 默认隐藏 */
}
/* 密码强度条 */
.password-strength {
    height: 5px;
    background-color: #e0e0e0;
    margin-top: 0.5rem;
    border-radius: 3px;
    overflow: hidden;
}
.strength-bar {
    height: 100%;
    width: 0;
    transition: width 0.3s, background-color 0.3s;
}
.strength-bar.weak {
    width: 33%;
    background-color: #ff4757;
}
.strength-bar.medium {
    width: 66%;
    background-color: #ffa502;
}
.strength-bar.strong {
    width: 100%;
    background-color: #2ed573;
}
/* 提交按钮 */
button[type="submit"] {
    width: 100%;
    padding: 0.8rem;
    background-color: #007bff;
    color: white;
    border: none;
    border-radius: 4px;
    font-size: 1rem;
    font-weight: bold;
    cursor: pointer;
    transition: background-color 0.3s;
}
button[type="submit"]:hover {
    background-color: #0056b3;
}

关键点:

  • .error: 当输入框验证失败时,我们给它添加这个 class,改变边框颜色。
  • .error-message: 默认是 display: none,当需要显示错误时,我们通过 jQuery 将其 display 设为 block
  • .strength-bar: 用于显示密码强度的动态条。

第三步:jQuery 交互逻辑

这是整个模板的核心,负责所有的验证、交互和提交逻辑。

jquery 注册模板
(图片来源网络,侵删)
// script.js
$(document).ready(function() {
    // 当表单提交时触发
    $('#registrationForm').on('submit', function(event) {
        // 阻止表单的默认提交行为
        event.preventDefault();
        // 重置所有错误提示
        $('.error-message').text('').hide();
        $('input').removeClass('error');
        // 获取表单数据
        var username = $('#username').val().trim();
        var email = $('#email').val().trim();
        var phone = $('#phone').val().trim();
        var password = $('#password').val();
        var confirmPassword = $('#confirm-password').val();
        var isValid = true;
        // 1. 验证用户名
        if (!username) {
            showError('username', '用户名不能为空');
            isValid = false;
        } else if (!/^[a-zA-Z0-9]{4,16}$/.test(username)) {
            showError('username', '用户名必须是4-16位字母或数字');
            isValid = false;
        }
        // 2. 验证邮箱
        if (!email) {
            showError('email', '邮箱不能为空');
            isValid = false;
        } else if (!/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email)) {
            showError('email', '请输入有效的邮箱地址');
            isValid = false;
        }
        // 3. 验证手机号
        if (!phone) {
            showError('phone', '手机号不能为空');
            isValid = false;
        } else if (!/^1[3-9]\d{9}$/.test(phone)) {
            showError('phone', '请输入有效的11位手机号码');
            isValid = false;
        }
        // 4. 验证密码
        if (!password) {
            showError('password', '密码不能为空');
            isValid = false;
        } else if (!/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$/.test(password)) {
            showError('password', '密码至少8位,必须包含字母和数字');
            isValid = false;
        }
        // 5. 验证确认密码
        if (!confirmPassword) {
            showError('confirm-password', '请确认密码');
            isValid = false;
        } else if (password !== confirmPassword) {
            showError('confirm-password', '两次输入的密码不一致');
            isValid = false;
        }
        // 如果所有验证都通过,则提交表单
        if (isValid) {
            // 在实际项目中,这里会使用 AJAX 发送数据到服务器
            // $.ajax({
            //     url: '/api/register',
            //     type: 'POST',
            //     data: {
            //         username: username,
            //         email: email,
            //         phone: phone,
            //         password: password
            //     },
            //     success: function(response) {
            //         alert('注册成功!');
            //         $('#registrationForm')[0].reset(); // 重置表单
            //     },
            //     error: function(xhr) {
            //         alert('注册失败: ' + xhr.responseText);
            //     }
            // });
            // 这里为了演示,我们只显示一个成功提示
            alert('注册成功!');
            $('#registrationForm')[0].reset(); // 重置表单
            $('.strength-bar').removeClass('weak medium strong').css('width', '0');
        }
    });
    // 实时密码强度检测
    $('#password').on('input', function() {
        var password = $(this).val();
        var strengthBar = $('.strength-bar');
        if (password.length === 0) {
            strengthBar.removeClass('weak medium strong').css('width', '0');
            return;
        }
        // 密码强度逻辑
        if (password.length < 6) {
            strengthBar.removeClass('medium strong').addClass('weak');
        } else if (password.length >= 6 && password.length <= 10) {
            strengthBar.removeClass('weak strong').addClass('medium');
        } else {
            // 检查是否包含字母和数字
            if (password.match(/[a-z]/) && password.match(/[0-9]/)) {
                strengthBar.removeClass('weak medium').addClass('strong');
            } else {
                strengthBar.removeClass('weak strong').addClass('medium');
            }
        }
    });
    // 输入框获得焦点时清除错误状态
    $('input').on('focus', function() {
        $(this).removeClass('error');
        var errorId = $(this).attr('id') + '-error';
        $('#' + errorId).text('').hide();
    });
    // --- 辅助函数 ---
    function showError(fieldId, message) {
        $('#' + fieldId).addClass('error');
        $('#' + fieldId + '-error').text(message).show();
    }
});

逻辑解析:

  1. $(document).ready(...): 确保 DOM 完全加载后再执行 jQuery 代码。
  2. $('#registrationForm').on('submit', ...): 监听表单的 submit 事件。
  3. event.preventDefault(): 非常重要,它阻止了浏览器默认的表单提交(页面刷新),让我们有机会在 JavaScript 中处理数据。
  4. isValid 标志: 一个布尔变量,用于跟踪所有验证是否通过,如果任何一个验证失败,它就设为 false
  5. 验证规则:
    • 使用 .trim() 去除输入内容两端的空格。
    • 使用正则表达式 (regex) 来验证格式,如用户名、邮箱、手机号和密码。
    • 如果验证失败,调用 showError() 函数来显示错误信息,并将 isValid 设为 false
  6. showError(fieldId, message): 一个辅助函数,用于给输入框添加 .error 样式,并在对应的错误提示 div 中显示消息。
  7. AJAX 提交: 在 if (isValid) 块中,我注释了标准的 AJAX 提交代码,在实际开发中,你应该取消注释并替换成你的后端 API 地址,这里用 alertform.reset() 来模拟成功提交。
  8. 实时密码强度:
    • 监听 #password 输入框的 input 事件(只要内容变化就触发)。
    • 根据密码长度和复杂度,动态地给 .strength-bar 添加不同的 classweak, medium, strong),这些 class 对应不同的 CSS 样式。
  9. 焦点清除错误: 当用户点击一个输入框时,清除该字段之前的错误状态,提供更好的用户体验。

如何使用

  1. 创建一个项目文件夹。
  2. 在文件夹中创建三个文件:index.htmlstyle.cssscript.js
  3. 将上面的代码分别复制到对应的文件中。
  4. 用浏览器打开 index.html 文件,你就可以看到一个功能完整的注册表单了。

这个模板非常实用,你可以根据自己项目的具体需求(比如不同的验证规则、后端 API 等)进行修改和扩展。

jquery 注册模板
(图片来源网络,侵删)