用 document.getelementbyid('myselect').value 可直接获取下拉框选中项的 value 值,前提是每个 option 都显式设置了 value 属性;未选中时返回空字符串,change 事件中读取最可靠。

用 document.getElementById() 获取下拉框的 value
下拉框(<select></select>)的选中值,最直接的方式是读取它的 value 属性。这个属性会自动返回当前被选中的 <option></option> 的 value 值(不是显示文本),前提是每个 <option></option> 都有明确的 value 属性。
常见错误:只写 <option>北京</option> 而没设 value,此时 value 会退化为 innerText,但行为不稳定(尤其在空格、换行时)。
- 务必给每个
<option></option>显式设置value,例如:<option value="beijing">北京</option> - 获取方式:
document.getElementById('mySelect').value—— 这就是你要的提交值 - 如果没选中任何项(且没设
selected),该值为空字符串"",不是null或undefined
监听 change 事件时注意触发时机
用户点击选项后,change 事件才触发,此时读 value 才可靠。别在 click 或 mousedown 里读——那时选项还没真正切换。
典型误用场景:用 oninput 绑定下拉框,它对 <select></select> 无效(仅适用于 <input>、<textarea></textarea>)。
- 正确绑定:
selectEl.addEventListener('change', () => { console.log(selectEl.value); }) - 若需兼容旧版 IE,用
onchange属性或attachEvent,但现代项目基本不用 -
表单提交前校验,建议在
submit事件里读,而不是依赖之前缓存的值(用户可能改完没触发change就点了提交)
用 FormData 提交时,name 属性决定键名
原生表单提交或通过 FormData 构造数据时,起作用的是 <select></select> 的 name 属性,不是 id。服务端收到的字段名就是这个 name 的值。
容易踩的坑:HTML 里写了 id="city" 却忘了写 name="city",结果后端收不到这个字段。
<select id="city" name="city"><option value="shanghai">上海</option></select>- JS 中构造 FormData:
new FormData(formEl),它会自动包含该select的选中值,key 是"city",value 是"shanghai" - 如果下拉框设置了
multiple,且用户多选,则同一个 key 会对应多个值(FormData支持重复键),后端需按数组处理
需要获取选中文本(而非 value)时别硬解析
极少数情况要的是显示文字(比如“北京”),而不是 value(比如 "beijing")。这时不要用 innerHTML 或正则去扒 <option></option> 标签内容。
正确做法是通过 selectedIndex 找到当前选中项,再读它的 text 属性:
const select = document.getElementById('mySelect');
const selectedIndex = select.selectedIndex;
const selectedText = select.options[selectedIndex].text;
注意:selectedIndex 为 -1 表示无选项被选中(比如所有 <option></option> 都没加 selected,且没默认选中)。
更稳妥的做法是先判断 selectedIndex >= 0 再取 .text,否则会报 Cannot read property 'text' of undefined。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











