
本文讲解如何准确读取多个 `
在表单处理中,若需收集多个独立
原逻辑中,selectedVal 是单一变量,被所有 select 的 change 事件共用。当用户先后切换不同下拉框时,该变量只会保留最后一次触发的值(例如先选 Red,再选 V,selectedVal 最终只存 "V"),导致 favColor 和 location 字段被错误地赋为同一值。
✅ 正确做法是:在提交时刻(addDets 函数内),直接按 ID 获取各 。这样能确保每个字段读取的是用户最终选定的真实值,且互不干扰。
以下是优化后的完整实现:
let list = [];
const addDets = (ev) => {
ev.preventDefault();
// ✅ 直接、独立获取每个 select 的当前值
const favColor = document.getElementById("fav").value;
const location = document.getElementById("loc").value;
const officials = {
name: document.getElementById("name").value,
age: document.getElementById("age").value,
favColor, // 对应 <select id="fav">
location // 对应 <select id="loc">
};
list.push(officials);
document.forms[0].reset(); // 重置表单(注意:会清空 select 的选中状态)
console.log(list);
};
document.addEventListener("DOMContentLoaded", () => {
document.getElementById('btn').addEventListener('click', addDets);
});? 关键注意事项:
- document.getElementById("fav").value 返回的是
- 若需支持多选(
- document.forms[0].reset() 会将所有表单控件(包括
- 无需为每个
通过这种「按需读取、即时封装」的方式,既能保证数据准确性,又能避免状态污染,是构建健壮表单数据收集逻辑的最佳实践。

















