上一节我们学习了JS中DOM树的遍历,本节我们将学习JS中的表单操作,包括表单的本地存储、信息验证和动态渲染。

比如我们有一个学生表,包括4个字段,姓名(name)、年龄(age)、性别(gender)学生码(ID),通过填写表格,进行信息验证,填写完后存入本地,然后从本地存储里拿出来渲染。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>学生信息表</title>
    <style>
        * { margin: 0; padding: 0; box-sizing: border-box; }
        body { font-family: sans-serif; padding: 20px; }
        .form-group { margin: 10px 0; }
        input, select { padding: 5px; margin-left: 10px; }
        button { padding: 8px 16px; margin: 10px 0; }
        table { border-collapse: collapse; margin-top: 20px; width: 100%; }
        th, td { border: 1px solid #ccc; padding: 8px; text-align: left; }
        .error { color: red; font-size: 12px; margin-top: 5px; }
    </style>
</head>
<body>
    <h2>学生信息录入</h2>
    <!-- 表单验证 -->
    <form id="studentForm">
        <div class="form-group">
            <label>姓名:</label>
            <input type="text" id="name" name="name">
            <div class="error" id="nameError"></div>
        </div>
       
        <div class="form-group">
            <label>年龄:</label>
            <input type="number" id="age" name="age">
            <div class="error" id="ageError"></div>
        </div>
       
        <div class="form-group">
            <label>性别:</label>
            <select id="gender" name="gender">
                <option value="男">男</option>
                <option value="女">女</option>
            </select>
        </div>
       
        <div class="form-group">
            <label>学生码:</label>
            <input type="text" id="studentId" name="studentId">
            <div class="error" id="idError"></div>
        </div>
       
        <button type="submit">添加学生</button>
    </form>
    <h2>学生列表</h2>
    <table id="studentTable">
        <thead>
            <tr>
                <th>姓名</th>
                <th>年龄</th>
                <th>性别</th>
                <th>学生码</th>
            </tr>
        </thead>
        <tbody id="studentList">
        </tbody>
    </table>
    <script>
        /* 3. 从本地存储获取学生数据 */
        function getStudents() {
            return JSON.parse(localStorage.getItem('students')) || [];//这里放一个空数组很讲究,确保处理的变量始终是数组
        }
        /* 2. 保存学生数据到本地存储 */
        function saveStudents(students) {
            localStorage.setItem('students', JSON.stringify(students));
        }
        /* 4. 渲染学生列表 */
        function renderStudents() {
            const students = getStudents();
            const tbody = document.getElementById('studentList');
            tbody.innerHTML = '';
            
            students.forEach(student => {
                const tr = document.createElement('tr');
                tr.innerHTML = `
                    <td>${student.name}</td>
                    <td>${student.age}</td>
                    <td>${student.gender}</td>
                    <td>${student.studentId}</td>
                `;
                tbody.appendChild(tr);
            });
        }
        /* 1. 填写表单内容进行信息验证 */
        document.getElementById('studentForm').addEventListener('submit', function(e) {
            e.preventDefault();
            /* 1.1 获取学生相关属性 */
            const name = document.getElementById('name').value.trim();
            const age = document.getElementById('age').value;
            const gender = document.getElementById('gender').value;
            const studentId = document.getElementById('studentId').value.trim();//trim剪切多余空格
            let isValid = true;//1.2 准备一个boolean变量标记信息是否合法
            
            // 1.3清空错误信息
            document.getElementById('nameError').textContent = '';
            document.getElementById('ageError').textContent = '';
            document.getElementById('idError').textContent = '';
            
            // 1.4 信息验证-姓名验证
            if (!/^[\u4e00-\u9fa5a-zA-Z]+$/.test(name)) {
                document.getElementById('nameError').textContent = '姓名只能包含中文和英文字母';
                isValid = false;
            }
            // 1.5 信息验证-年龄验证
            if (age > 100 || age < 1) {
                document.getElementById('ageError').textContent = '年龄必须在1-100之间';
                isValid = false;
            }
            
            // 1.6 信息验证-学生码验证
            if (!studentId) {
                document.getElementById('idError').textContent = '学生码不能为空';
                isValid = false;
            }
            //1.7 检查学生信息是否合法,合法则放本地存储。
            if (isValid) {
                const students = getStudents();
                students.push({ name, age, gender, studentId });
                saveStudents(students);
                renderStudents();
                
                // 1.8清空表单
                document.getElementById('studentForm').reset();
            }
        });
        // 5. 初始化渲染
        renderStudents();
    </script>
</body>
</html>

本例子没有删除学生操作,读者可以自行尝试,实现表格单个或全部一键清空效果。

总结:本节我们以实践为主,讲了一下表单验证的基本方法。具体操作多与DOM方法有关,比如标签的获取、标签的追加、正则表达式以及reset()重置函数的使用。

点赞(128)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)