默认勾选状态只能由html属性决定;checked、selected、value必须写在标签中才生效,js赋值仅影响运行时状态,刷新即丢失,form.reset()也只恢复html初始值。

默认勾选状态只能靠 HTML 属性决定,checked、selected、value 这三类属性必须写在标签里才生效;JS 赋值只是运行时状态,刷新就丢,form.reset() 也只认 HTML 初始值。
radio 默认选中只看 checked 是否存在,不看值
checked 是布尔属性,只要标签上有这个词,浏览器就当默认选中——checked="true"、checked=""、checked="false" 效果完全一样。别信属性值,只看有没有这个单词。
- 同一组 radio 必须共用**完全一致**的
name(大小写敏感、不能有空格),否则多个checked会同时生效,提交时全发出去 - 漏写
name或拼错(比如name="color"和name="colour")是常见调试盲区,直接看 Elements 面板确认最终渲染出的 HTML - 服务端模板里避免写
checked="{{ $user->is_admin }}",可能渲染出checked="0",结果还是选中;应改用条件判断是否插入checked
checkbox 可多个同时默认勾选,selected 完全无效
每个 input[type="checkbox"] 独立判断,默认状态互不干扰。要默认勾选“邮件”和“站内信”,就分别给对应标签加 checked:
<input type="checkbox" name="notify" value="email" checked><input type="checkbox" name="notify" value="inapp" checked>
selected 是 <option></option> 的属性,写在 checkbox 上静默失败,不会报错也不会生效。
- 用 CSS 自定义样式(比如
display: none+ 伪元素)时,checked属性仍是唯一触发视觉切换的依据,不能删 - 动态创建的 checkbox 必须先挂载再设
.checked = true,否则赋值被丢弃:el = document.createElement('input'); el.type = 'checkbox'; document.body.appendChild(el); el.checked = true;
<select multiple></select> 预选多个选项必须同时满足两个条件
既要 <select></select> 标签带 multiple 属性,也要目标 <option></option> 带 selected:
<select multiple><option value="a">A</option> <option value="b" selected>B</option></select>
不加 multiple,即使多个 selected,浏览器也只认第一个。
- React/Vue 中
selected属性会被框架状态覆盖,HTML 里的selected形同虚设,得靠数组绑定(如v-model="selectedValues")初始化 - JS 动态设置时,应操作
option.selected = true或修改select.selectedIndex,而不是用setAttribute("selected", "")—— 后者只改属性字符串,不触发 DOM 状态同步
最容易被忽略的是:DOM 尚未挂载时执行 JS 赋值(比如在 <script></script> 标签里直接写),会报 Cannot set property 'checked' of null;还有表单重置后回不到 JS 设的值,只回到 HTML 初始值——这两点决定了所有“默认”逻辑必须前置到 HTML 渲染阶段。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











