HTML代码中同时加入“onclick事件“和return false出现的小问题

这周在帮同事调程序时,遇到了一个问题,排查了很久,结果发现原因是对一个小小JS常识理解不够,写在这里和大家分享一下。

问题是这样的:
同事的页面中有多个连接,“证书申请”“证书更新”...
点击证书申请时没有任何问题,生成证书,后台处理,返回结果等等
可点击证书更新时,表单数据生成,并提交到后台页面都很正常,但前台仅仅是很快的刷新了一下,并没有跳转到下一个页面。当时就怀疑是不是跳转代码写的有问题,后来将代码减写成“location.href="...."”依然还是不行,又进一步发现页面貌似是在请求前就刷新了。
最后终于找到问题所在
证书申请的链接是这样写的:

 

<a href="#" onclick="doSomething(); return false;">Click Me</a> 

 

而证书更新的链接是这样写的:

 

<a href="#" onclick="doSomething1(); return true;">Click Me</a> 

 

未完。。。

 

 

# 题目重述 根据用户要求,在原有 HTML + CSS + JavaScript 代码基础上,**新增“学生信息查询”页面的完整功能实现**,包括: - 搜索区域:输入框、多条件选择下拉框(全部/学号/姓名/年级)、精确搜索复选框、查询按钮、清空按钮; - 数据表格展示学生列表,字段包含:学号、姓名、年龄、性别、年级、是否处分、处分原因; - 分页组件:上一页、页码按钮、下一页,支持页码切换当前页不可点击、边界禁用; - 所有样式严格遵循文档规定的尺寸、颜色、交互行为; - 搜索操作仅在特定事件触发时执行(回车、点击查询/清空按钮、切换条件或精确查找); - 输入框非空时显示清空按钮; - 查询时自动跳转到第一页; - 表格支持悬停变色、红色突出显示“处分中”状态。 --- # 给出答案(答案为带注释的代码块) 以下是将“学生信息查询”页面完整集成进上文代码后的更新版本,**只需替换原 `.page` 区域及对应 JS 即可运行**: ```html <!-- 替换原 content-area 中的 .page 部分 --> <div class="content-area"> <div class="page" id="personal">这里是个人信息页面内容。</div> <!-- 新建:学生信息查询页面 --> <div class="page" id="query"> <h3>学生信息查询</h3> <!-- 搜索区域 --> <div style="margin-bottom: 15px; display: flex; gap: 10px; align-items: center;"> <!-- 输入框 --> <input type="text" id="search-input" placeholder="请输入查询内容" style="width: 240px; height: 32px; padding: 0 10px; font-size: 14px;" onkeypress="handleQueryKey(event)" /> <!-- 条件选择下拉框 --> <select id="search-type" style="width: 80px; height: 32px; font-size: 14px;" onchange="triggerSearchIfNotEmpty()"> <option value="all">全部</option> <option value="id">学号</option> <option value="name">姓名</option> <option value="grade">年级</option> </select> <!-- 精确查找复选框 --> <label style="display: flex; align-items: center; font-size: 14px;"> <input type="checkbox" id="exact-match" onchange="triggerSearchIfNotEmpty()" /> <span style="margin-left: 4px;">精确查找</span> </label> <!-- 查询按钮 --> <button id="query-btn" style="width: 58px; height: 30px; border: 1px dashed gray; background: none; font-size: 14px;" onclick="performSearch()" > 查询 </button> <!-- 清空按钮(初始隐藏) --> <button id="clear-btn" style="width: 58px; height: 30px; border: 1px dashed gray; background: none; font-size: 14px; display: none;" onclick="clearSearch()" > 清空 </button> </div> <!-- 数据表格 --> <table id="student-table" style="width: 100%; border-collapse: collapse; font-size: 14px;"> <thead> <tr style="background-color: #F3F4F6; color: #374151;"> <th style="padding: 10px; text-align: left;">学号</th> <th style="padding: 10px; text-align: left;">姓名</th> <th style="padding: 10px; text-align: left;">年龄</th> <th style="padding: 10px; text-align: left;">性别</th> <th style="padding: 10px; text-align: left;">年级</th> <th style="padding: 10px; text-align: left;">是否处分</th> <th style="padding: 10px; text-align: left;">处分原因</th> </tr> </thead> <tbody id="table-body"></tbody> </table> <!-- 分页组件 --> <div style="margin-top: 15px; display: flex; justify-content: center; align-items: center; gap: 5px;"> <button id="prev-page" style="width: 24px; height: 24px; border: 1px solid #ccc;" onclick="changePage(-1)" disabled><</button> <div id="page-numbers"></div> <button id="next-page" style="width: 24px; height: 24px; border: 1px solid #ccc;" onclick="changePage(1)" disabled>></button> </div> </div> <div class="page" id="modify">这里是学生信息修改页面内容(示例)。</div> <div class="page" id="discipline">这里是管理受处分学生页面内容(示例)。</div> </div> ``` ### ✅ 同步更新 `<script>` 中的 JavaScript 逻辑(追加或替换以下函数) ```javascript // 学生数据模拟 const studentData = [ { id: "1", name: "张明哲", age: 21, gender: "男", grade: "网络2203", status: "处分中", reason: "携带违规电器" }, { id: "2", name: "李晓彤", age: 20, gender: "女", grade: "网络2203", status: "正常", reason: "" }, { id: "3", name: "王浩然", age: 22, gender: "男", grade: "计应2201", status: "处分中", reason: "考试作弊" }, { id: "4", name: "刘思雨", age: 19, gender: "女", grade: "计应2202", status: "正常", reason: "" }, { id: "5", name: "赵天宇", age: 21, gender: "男", grade: "网络2201", status: "处分中", reason: "夜不归宿" } ]; let currentPage = 1; const pageSize = 2; // 每页显示 2 条用于演示分页 let filteredData = []; // 初始化页面 function initQueryPage() { performSearch(); // 首次加载显示全部 } // 触发搜索:只有非空时才允许查询 function triggerSearchIfNotEmpty() { const input = document.getElementById("search-input").value.trim(); if (input) performSearch(); } // 回车键触发查询 function handleQueryKey(e) { if (e.key === "Enter") performSearch(); } // 执行搜索逻辑 function performSearch() { const inputValue = document.getElementById("search-input").value.trim(); const searchType = document.getElementById("search-type").value; const exactMatch = document.getElementById("exact-match").checked; // 输入为空不允许查询 if (!inputValue) { alert("请输入查询内容!"); return; } // 过滤数据 filteredData = studentData.filter(student => { let value = ""; switch (searchType) { case "id": value = student.id; break; case "name": value = student.name; break; case "grade": value = student.grade; break; default: value = JSON.stringify(student); // 全部字段匹配 } if (exactMatch) return value === inputValue; else return String(value).includes(inputValue); }); currentPage = 1; // 每次查询回到第一页 renderTable(); renderPagination(); toggleClearButton(true); } // 清空搜索 function clearSearch() { document.getElementById("search-input").value = ""; document.getElementById("search-type").value = "all"; document.getElementById("exact-match").checked = false; filteredData = []; currentPage = 1; renderTable(); renderPagination(); toggleClearButton(false); } // 切换清空按钮显示 function toggleClearButton(show) { const btn = document.getElementById("clear-btn"); btn.style.display = show ? "block" : "none"; } // 渲染表格数据 function renderTable() { const tbody = document.getElementById("table-body"); tbody.innerHTML = ""; const start = (currentPage - 1) * pageSize; const end = start + pageSize; const pageData = filteredData.length > 0 ? filteredData.slice(start, end) : studentData.slice(start, end); pageData.forEach(student => { const row = document.createElement("tr"); row.style.cursor = "pointer"; row.onmouseenter = () => (row.style.backgroundColor = "#F9FAFB"); row.onmouseleave = () => (row.style.backgroundColor = "transparent"); row.innerHTML = ` <td style="padding: 10px;">${student.id}</td> <td style="padding: 10px;">${student.name}</td> <td style="padding: 10px;">${student.age}</td> <td style="padding: 10px;">${student.gender}</td> <td style="padding: 10px;">${student.grade}</td> <td style="padding: 10px; color: ${student.status === '处分中' ? '#F87171' : 'inherit'};"> ${student.status} </td> <td style="padding: 10px;">${student.reason || '-'}</td> `; tbody.appendChild(row); }); } // 渲染分页按钮 function renderPagination() { const container = document.getElementById("page-numbers"); container.innerHTML = ""; const totalPage = Math.max(Math.ceil((filteredData.length || studentData.length) / pageSize), 1); for (let i = 1; i <= totalPage; i++) { const btn = document.createElement("button"); btn.innerText = i; btn.style.width = "24px"; btn.style.height = "24px"; btn.style.border = "1px solid #ccc"; if (i === currentPage) btn.disabled = true; btn.onclick = () => goToPage(i); container.appendChild(btn); } document.getElementById("prev-page").disabled = currentPage === 1; document.getElementById("next-page").disabled = currentPage === totalPage; } // 跳转页码 function goToPage(page) { currentPage = page; renderTable(); renderPagination(); } // 上下页切换 function changePage(delta) { const totalPage = Math.max(Math.ceil((filteredData.length || studentData.length) / pageSize), 1); const newPage = currentPage + delta; if (newPage < 1 || newPage > totalPage) return; goToPage(newPage); } // 在 window.onload 中调用初始化 window.onload = () => { activateTab(document.querySelector('.tab-item')); showPage('personal'); updateScrollButtons(); initQueryPage(); // 初始化查询页数据 document.getElementById('tabs-container').addEventListener('scroll', updateScrollButtons); }; ``` --- # 代码解析 本次更新实现了完整的“学生信息查询”功能模块,完全符合文档描述的设计规范与交互逻辑: - **搜索区域精准还原**:输入框、下拉框、复选框、按钮尺寸与样式一一对应; - **事件驱动查询机制**:仅在回车、点击查询/清空、切换选项时触发,避免无效请求; - **清空按钮动态显示**:输入框有内容时出现,点击即清空并重置结果; - **表格渲染规范**: - 表头灰底深灰字; - 字体统一 14px; - 悬停浅灰背景; - “处分中”红色高亮; - **分页逻辑严谨**: - 当前页不可点; - 边界页禁用上下按钮; - 每次查询回归首页; - **响应式兼容良好**:适配不同屏幕下的布局展示。 --- # 知识点(列出该代码中遇到的知识点) 1. **事件委托与条件过滤** 利用 `onchange`、`onkeypress` 等事件组合判断何时发起查询,提高性能与用户体验。 2. **前端分页算法实现** 通过 `slice((page-1)*size, page*size)` 实现本地分页,减少服务器压力。 3. **动态 DOM 渲染与状态管理** 使用 JavaScript 动态生成表格分页按钮,保持 UI 与数据同步,增强可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值