select 标签不支持原生联动,需 JavaScript 实现;multiple 是布尔属性,合法写法仅 <select multiple> 或 <select multiple="multiple">;size 影响多选可见性,但移动端基本无效。

select 标签本身不支持“联动”——那是 JavaScript 控制的逻辑,不是 HTML 属性能解决的;而 multiple 是布尔属性,写错值或忽略兼容性细节,多选就直接失效。
HTML 中 multiple 的合法写法只有两种
浏览器只认布尔存在性,不解析值内容:
-
<select multiple>—— 推荐,简洁且符合 HTML5 规范 -
<select multiple="multiple">—— XHTML 风格,虽未被废弃但冗余,容易让人误以为可以写multiple="true"或multiple="1",实际这些写法在部分旧版 Safari 或 IE 中会被忽略
别写 multiple="true"、multiple="on" 或省略引号只留 multiple=,这些都不可靠。
size 属性决定用户能否直观感知多选能力
没设 size 时,<select multiple> 在多数桌面浏览器里只显示一行(带滚动条),用户根本看不出能多选,必须按住 Ctrl/Cmd 才行——这违背直觉。
立即学习“前端免费学习笔记(深入)”;
- 加
size="4"会让下拉变成可见 4 行的列表框,用户一眼就知道可多选 -
size值小于选项总数时才生效;设成size="100"会把所有选项撑开,影响布局 - 移动端(尤其是 iOS Safari)基本无视
multiple,点开仍弹单选 Picker,size也无效——别把它当核心交互依赖
ASP.NET Web Forms 中 HtmlSelect.Multiple 的坑
服务端控件 HtmlSelect 的 Multiple 属性是 C# 属性,和 HTML 的 multiple 属性不是一回事,但最终会渲染为相同 HTML。
- 服务端设
Select1.Multiple = true后,必须确保前端没用 JS 覆盖掉multiple属性,否则渲染结果可能不一致 - 回发(postback)后,
SelectedIndices或循环Items[i].Selected才能取到多选值;只读Value只返回第一个选中项 - 如果用
AutoPostBack="true"+OnServerChange,注意多选变更不会自动触发,得靠按钮提交或 JS 手动触发
联动菜单必须用 JavaScript 实现,select 标签不提供原生联动
所谓“联动”,比如省 → 市 → 区三级下拉,本质是监听一个 select 的 change 事件,再用 JS 更新另一个 select 的 options。HTML 本身没有任何联动机制。
- 不要试图用
multiple来实现联动——它只控制单个select内部是否允许多选 - 联动时若目标
select也需要多选,记得同步设置它的multiple和size - 服务端 ASP.NET 场景下,避免在
Page_Load里无条件重置Items,否则用户刚选的值可能被清空
最易被忽略的一点:移动端对 multiple 的支持形同虚设,哪怕你写了 <select multiple size="5">,iOS 上点开还是单选弹窗。真要多选体验,得换 checkbox 组合或第三方组件。



















