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

如何比对HTML表格下拉框用户选择值与对象数组存储值

前端下拉选择校验功能实现

核心修改点

  • 保留原有Bootstrap表格基础样式,name列维持纯文本展示,keyUnit、unit2、unit3三列替换为下拉选择组件
  • 提前提取所有字段的可选值做去重处理,补充空选项适配无中间名的人员条目
  • 新增校验触发按钮,点击后逐行匹配用户选择值和预定义的tabledata数据
  • 校验不通过时给错误单元格加红色边框高亮,通过则弹出成功提示

完整可运行代码

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>表格下拉校验</title>
  <link href="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/css/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<div class="container mt-4">
  <div class="row">
    <div class="col-12">
      <div class="table-responsive" id="table1"></div>
      <button id="checkBtn" class="btn btn-primary mt-3">提交校验</button>
    </div>
  </div>
</div>

<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.14.3/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.1.3/dist/js/bootstrap.min.js"></script>
<script>
const tabledata = [{
    name: "George Clooney",
    keyUnit: "Clooney",
    unit2: "George",
    unit3: "",
  },
  {
    name: "George A. Clooney",
    keyUnit: "Clooney",
    unit2: "George",
    unit3: "A",
  },
  {
    name: "George Allan Clooney",
    keyUnit: "Clooney",
    unit2: "George",
    unit3: "Allan",
  },
  {
    name: "George Robert Clooney",
    keyUnit: "Clooney",
    unit2: "George",
    unit3: "Robert",
  },
  {
    name: "Simon Cowell",
    keyUnit: "Cowell",
    unit2: "Simon",
    unit3: "",
  },
];
const headers = ["name", "key Unit", "unit2", "unit3"];
// 提前收集各列下拉选项并去重
const selectOptions = {
  keyUnit: [...new Set(tabledata.map(item => item.keyUnit))],
  unit2: [...new Set(tabledata.map(item => item.unit2))],
  unit3: [...new Set(tabledata.map(item => item.unit3))]
}

const generateTable = (tableID) => {
  let selectedTable = document.querySelector(`#${tableID}`);
  let table = document.createElement("table");
  table.classList.add("table", "custom", "table-bordered");
  let headerRow = document.createElement("tr");
  headers.forEach((headerText) => {
    let header = document.createElement("th");
    let textNode = document.createTextNode(headerText);
    header.appendChild(textNode);
    headerRow.appendChild(header);
  });
  table.appendChild(headerRow);

  tabledata.forEach((rowData, rowIndex) => {
    let row = document.createElement("tr");
    // 遍历字段,name列渲染文本,其他列渲染下拉框
    Object.entries(rowData).forEach(([field, value]) => {
      let cell = document.createElement("td");
      if(field === 'name'){
        let textNode = document.createTextNode(value);
        cell.appendChild(textNode);
      }else{
        let select = document.createElement("select");
        select.classList.add("form-control", "form-control-sm");
        select.dataset.row = rowIndex;
        select.dataset.field = field;
        // 添加默认空选项
        let defaultOpt = document.createElement("option");
        defaultOpt.value = "";
        defaultOpt.textContent = "请选择";
        select.appendChild(defaultOpt);
        // 添加对应字段的所有可选值
        selectOptions[field].forEach(optVal => {
          let opt = document.createElement("option");
          opt.value = optVal;
          opt.textContent = optVal || '(空)';
          select.appendChild(opt);
        })
        cell.appendChild(select);
      }
      row.appendChild(cell);
    });
    table.appendChild(row);
  });
  selectedTable.appendChild(table);
};

// 校验逻辑
document.querySelector("#checkBtn").addEventListener("click", () => {
  let isAllCorrect = true;
  // 清除之前的错误高亮
  document.querySelectorAll("select").forEach(sel => {
    sel.classList.remove("border", "border-danger");
  })
  // 逐行逐字段比对选择值和正确答案
  tabledata.forEach((rowData, rowIndex) => {
    ['keyUnit', 'unit2', 'unit3'].forEach(field => {
      let select = document.querySelector(`select[data-row="${rowIndex}"][data-field="${field}"]`);
      if(select.value !== rowData[field]){
        isAllCorrect = false;
        select.classList.add("border", "border-danger");
      }
    })
  })
  if(isAllCorrect){
    alert("所有答案正确");
  }else{
    alert("存在错误选项,请检查标红的下拉框");
  }
})

generateTable("table1");
</script>
</body>
</html>

效果说明

  • 页面加载后自动生成带下拉选择框的Bootstrap表格,用户可在三个可选列点选对应值
  • 点击提交校验按钮后,系统自动比对所有选择值和预设正确答案
  • 错误选项会自动加红色边框提示,全部选对弹出成功提示,选错弹出错误提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 10:36:24