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

HTML+JS学生信息表开发:年龄<18隐藏按钮的代码校验修正

学生信息录入功能实现说明

原有代码问题梳理

  • 标签结构不规范:<script>标签被错误放置在<html>根标签下、<head>标签之前,会导致DOM加载顺序错乱,元素获取失败;<br>换行标签错误嵌套在表格<th>标签内,破坏表格结构
  • 变量作用域错误:存储学生数据的myArray定义在添加按钮的点击回调函数内部,每次触发点击都会重置数组,无法持久保存已录入的合法数据
  • 类型校验缺失:从输入框获取的年龄值为字符串类型,未做数值转换直接比较,会出现隐式转换导致的判断错误(例如输入"17test"会被误判为合法年龄);未对fullname的「名 - 姓」格式做校验
  • 功能逻辑缺失:仅实现了合法数据入数组的逻辑,没有动态渲染表格内容的代码;未实现年龄小于18时自动隐藏添加按钮的需求

补全后完整代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>学生信息录入</title>
    <style>
        label { margin-right: 12px; }
        table { border-collapse: collapse; margin-top: 20px; }
        th, td { border: 1px solid #ccc; padding: 6px 12px; text-align: center; }
    </style>
</head>
<body>
    <label>Fullname(格式:名 - 姓): <input type="text" id="inputValueFullname"></label>
    <label>Age:<input type="number" id="inputValueAge"></label>
    <label>Amka:<input type="text" id="inputValueAmka"></label>
    <button type="button" id="addBtn" onclick="createPerson();">Add</button>
    <table id="table">
        <thead>
            <tr>
                <th>Name/Surname</th>
                <th>Age</th>
                <th>AMKA</th>
            </tr>
        </thead>
        <tbody id="tableBody"></tbody>
    </table>

    <script>
        // 全局存储学生数据,避免每次点击重置
        const myArray = [];
        const ageInput = document.getElementById('inputValueAge');
        const addBtn = document.getElementById('addBtn');
        const tableBody = document.getElementById('tableBody');

        // 学生构造函数
        function Person(fullname, age, amka) {
            this.fullname = fullname;
            this.age = Number(age);
            this.amka = amka;
        }

        // 监听年龄输入,小于18时自动隐藏添加按钮
        ageInput.addEventListener('input', function() {
            const inputAge = Number(this.value.trim());
            // 输入为有效数字且小于18时隐藏按钮,其余情况显示
            if (!isNaN(inputAge) && inputAge < 18) {
                addBtn.style.display = 'none';
            } else {
                addBtn.style.display = 'inline-block';
            }
        })

        // 渲染表格
        function renderTable() {
            // 清空现有表格内容
            tableBody.innerHTML = '';
            // 遍历学生数组生成行
            myArray.forEach(student => {
                const tr = document.createElement('tr');
                tr.innerHTML = `
                    <td>${student.fullname}</td>
                    <td>${student.age}</td>
                    <td>${student.amka}</td>
                `;
                tableBody.appendChild(tr);
            })
        }

        // 添加学生逻辑
        function createPerson() {
            const fullname = document.getElementById('inputValueFullname').value.trim();
            const ageVal = ageInput.value.trim();
            const amka = document.getElementById('inputValueAmka').value.trim();
            const age = Number(ageVal);

            // 校验规则:三个字段非空、年龄>=18、fullname包含-分隔符符合「名 - 姓」格式
            if (!fullname || !ageVal || !amka || isNaN(age) || age < 18 || !fullname.includes('-')) {
                alert('请检查输入:所有字段不能为空,年龄不能小于18,姓名需符合「名 - 姓」格式');
                return;
            }

            // 通过构造函数创建学生实例
            const newStudent = new Person(fullname, age, amka);
            myArray.push(newStudent);
            // 重新渲染表格
            renderTable();

            // 清空输入框
            document.getElementById('inputValueFullname').value = '';
            ageInput.value = '';
            document.getElementById('inputValueAmka').value = '';
            addBtn.style.display = 'inline-block';
        }
    </script>
</body>
</html>

功能实现说明

  • 年龄输入框绑定实时监听事件,输入值为有效数字且小于18时,添加按钮自动隐藏;输入值合法或为空时按钮正常显示
  • 所有输入值增加校验逻辑:非空判断、年龄数值类型判断、fullname格式判断,不符合规则时弹出提示
  • 合法学生数据通过Person构造函数生成实例后存入全局数组,每次新增数据后重新渲染表格内容
  • 修正了原代码的标签结构问题,增加基础样式优化展示效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 16:45:14