在构建交互式 web 表单时,经常会遇到一个场景:某个输入字段的必填状态需要根据用户在同一行中的另一个字段(通常是下拉菜单或复选框)的选择而动态变化。特别是在 html 表格中,由于其结构化特性,定位和操作相邻的元素需要一定的 dom 遍历技巧。
本教程旨在解决以下具体问题:在一个 HTML 表格中,当用户在“审批 (Approval)”列的下拉菜单中选择“拒绝 (Rejected)”或“讨论 (Discuss)”时,如何使同一行中“评论 (Comments)”列的文本输入框变为必填项。
实现这一功能的关键在于以下两点:
首先,我们需要修改生成 HTML 表格的 JavaScript 代码(在原始问题中是 GAS 函数),在每个“审批”下拉菜单中添加 onchange 事件处理器,并传入当前下拉菜单元素本身(this)。
function createTable(dataArray) { if (dataArray && dataArray.length > 0) { // 为每个下拉菜单添加 onchange 事件,并传入当前元素 var option = "<select name='D1' onchange='selectValueChanged(this)'>" + "<option value='empty'></option>" + "<option value='Approved'>Approved</option>" + "<option value='Discuss'>Discuss</option>" + "<option value='Rejected'>Rejected</option>" + "</select>"; var textBox = "<input type='text' name='comments'/>" var result = "<div class='card'><table class='table table-borderless table-hover' id='dtable'>" + "<thead style='white-space: nowrap'>" + "<tr>" + "<th class='text-center'>Notes</th>" + "<th class='text-center'>Approval</th>" + "<th class='text-center'>Comments</th>" + "</tr>" + "</thead>" + "<tbody>"; for (var i = 0; i < dataArray.length; i++) { result += "<tr>"; for (var j = 0; j < dataArray[i].length; j++) { result += "<td class='align-middle' style='word-wrap: break-word;max-width: 160px;text-align:center'>" + dataArray[i][j] + "</td>"; } result += "<td class='align-middle' style='text-align:center'>" + option + "</td>"; // 包含下拉菜单的单元格 result += "<td class='align-middle' style='text-align:center'>" + textBox + "</td>"; // 包含文本框的单元格 result += "</tr>"; } result += "</tbody></table></div><br>"; var div = document.getElementById('search-results'); div.innerHTML = result; } else { var div = document.getElementById('search-results'); div.innerHTML = "Data not found!"; } }
在上述代码中,我们为
立即学习“前端免费学习笔记(深入)”;
接下来,我们需要实现 selectValueChanged 函数,该函数将接收下拉菜单元素作为参数,并根据其选定值来操作相邻的文本输入框。
function selectValueChanged(cur) { // cur 参数即为触发事件的 <select> 元素 // 1. 获取 <select> 元素的父元素 <td> // cur.parentElement // 2. 获取包含文本输入框的相邻 <td> 元素 // cur.parentElement.nextElementSibling // 3. 获取相邻 <td> 元素中的第一个子元素,即 <input type='text'> // cur.parentElement.nextElementSibling.children[0] const commentsInput = cur.parentElement.nextElementSibling.children[0]; if (cur.value === "Rejected" || cur.value === "Discuss") { // 如果选择“Rejected”或“Discuss”,则将评论字段设为必填 commentsInput.required = true; commentsInput.placeholder = "此字段为必填项"; } else { // 否则,取消必填状态 commentsInput.required = false; commentsInput.placeholder = "可选"; } }
代码解释:
<!-- 表格生成时 --> <td class='align-middle' style='text-align:center'><input type='text' name='comments' class='comments-input'/></td> <!-- JavaScript 中 --> const commentsInput = cur.closest('tr').querySelector('.comments-input');
通过本教程,我们学习了如何在 HTML 表格中实现基于下拉菜单选择的动态必填字段功能。核心在于利用 JavaScript 的事件监听机制和 DOM 遍历能力,精确地定位和修改目标元素。在实际开发中,建议采用更具鲁棒性的 DOM 元素定位方法(如使用 class 或 data- 属性),并结合良好的用户体验设计,以构建更健壮、更友好的 Web 应用程序。
以上就是HTML 表格中基于选择动态设置相邻输入字段为必填项的详细内容,更多请关注php中文网其它相关文章!
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号