bootstrap原生select默认选中第一项的条件是:无selected属性、无title或placeholder类属性,且浏览器隐式选中首个option;bootstrap-select插件则无论html如何均默认选中首个option,需用deselectall或data-none-selected-text禁用。

Bootstrap原生 select 默认选中第一项的触发条件
Bootstrap 5 的 form-select 不会主动干预原生 select 的行为,是否默认选中第一项,完全取决于 HTML 规则:如果没有任何 selected 属性,且没有 title 或 placeholder 类属性,浏览器就会把第一个 option 当作“隐式选中项”——但这只是视觉和 .value 的表现,option 元素本身并未被标记为 selected。
- 有
selected属性的option才是真正被 DOM 认可的默认项(例如:<option value="1" selected>北京</option>) - 加了
title(如<select title="请选择"></select>)或用了form-floating+disabled占位项,会阻止默认选中第一项 - JavaScript 动态插入
option后未调用select.selectedIndex = 0,也不会自动选中
bootstrap-select 插件下如何避免默认选中第一项
使用 bootstrap-select 时,初始化后默认会选中第一个 option(即使它没写 selected),这是插件行为,不是浏览器默认。要禁用它:
- 在
select标签上加data-none-selected-text="请选择",并确保没有selected属性的option - 初始化后立刻执行
$("#mySelect").selectpicker("deselectAll"),注意必须在.selectpicker()初始化之后调用 - 如果用 AJAX 加载完
option,需先.selectpicker("refresh"),再.selectpicker("deselectAll"),顺序不能反 - 不要依赖
title属性来“掩盖”选中状态——插件仍会把第一个值设为内部选中值,只是界面上显示 title 文字而已
用 JS 主动设置默认选中项(非第一项)
当你要跳过第一项、默认选中特定值(比如 ID=5 的选项),关键不是“怎么选”,而是“什么时候选”:
- DOM 渲染完成、
option已存在后再操作,否则.val("5")无效 - 原生方式:
document.querySelector("#mySelect option[value='5']").selected = true,然后触发change事件 -
bootstrap-select方式:$("#mySelect").selectpicker("val", "5").trigger("change"),注意传入的是字符串或字符串数组(多选) - 若选项是动态生成的,务必等
.selectpicker("refresh")完成后再设值,否则插件内部缓存还没更新
最容易被忽略的是:插件的 val() 方法返回的是字符串(单选)或数组(多选),但设值时传字符串就能生效;而原生 select.value = "5" 在插件接管后不会同步 UI,必须走插件 API。











