selected属性仅在HTML解析时生效,用于指定初始选中项;页面加载后,其不再影响选中状态,须通过select.value或selectedIndex动态控制。
页面加载完成后,selected 属性就失去控制力了。它只是告诉浏览器“初始该选谁”,之后你用 JS 改 select.value 或 select.selectedIndex,DOM 上的 selected 属性可能还留着,但界面和表单提交值完全不认它。
常见误判场景:
v-model 或 value prop,selected 被彻底忽略,连 DevTools 都看不出异常selected,客户端水合时 mismatch,控制台报错、界面闪动DOMContentLoaded 里执行了 select.value = "xxx",结果覆盖了 HTML 里的默认选中用 .html() 或 .append() 插入含 selected 的 <option> 后立刻调 form.render()(Layui)或期望它自动生效,大概率失败——因为插入操作是异步的,DOM 可能还没真正就位。
实操建议:
setTimeout(() => { /* 渲染或赋值 */ }, 0) 或 Promise.resolve().then(...)
form.render(),改用 form.render('select', 'my-filter') 精准刷新指定区域<form>:动态插入完整 <form> 标签会被浏览器自动截断,内部 <option selected> 直接丢失<select><option selected>...,且父容器必须有 class="layui-form"
想用 JS 动态设某个 <option> 为选中项,写 $("option[value='x']").attr("selected", true) 是错的——它只改 DOM 属性,不触发浏览器选择逻辑,多次操作后界面不更新。
正确做法:
.prop("selected", true):直接操作 property,反映真实选中状态selectEl.value = "x":简洁、跨浏览器稳定、无视 disabled 状态干扰selected 无效:哪怕 DOM 上显示 selected="",浏览器也不会让它成为实际选中项;调试时检查 select.selectedOptions,它永远只返回未 disabled 的选项某些 Firefox 版本会因自动填充功能覆盖 HTML 的 selected 行为,导致首次加载时默认选项空白或错乱。
解决方式很简单:
<select> 标签加上 autocomplete="off"
selected 是布尔属性,只写 selected 就行,别写 selected="true" 或 selected="selected",这些都违反 HTML5 规范<option> 同时写 selected,浏览器只认第一个,其余被忽略——服务端/模板生成时务必只给一个加最常被忽略的点:selected 和 disabled 同时存在时,selected 彻底失效,且这个行为是所有现代浏览器统一遵守的规范,不是 bug。想实现“占位提示+默认选中”,得用一个 disabled 无 value 的 <option> 放最前,再确保后续有至少一个可用选项。
virtualbox下怎么实现ubuntu20.04开机自动挂载共享文件夹?
ubuntu20.04怎么开启护眼模式? ubuntu夜间模式的设置方法
如何在Ubuntu 20.04上安装Microsoft Edge浏览器
Ubuntu20.10优麒麟触摸手势有哪些? 优麒麟系统新增手势汇总
优麒麟20.04.1发布 更新内容汇总(附下载)
Mermaid Visual Editor 如何同步可视化操作与 Mermaid 源码?