checked属性应直接写为checked(无等号、无值),这是W3C定义的布尔属性;常见错误如checked="true"语义错误,JS中须操作.checked属性而非setAttribute,且动态插入元素需先挂载再赋值。

checked 属性怎么写才真正生效
直接在 <input type="checkbox"> 或 <input type="radio"> 标签里写 checked,不带等号、不带引号、不带值——浏览器就认。这是 W3C 规范定义的布尔属性,存在即为 true。
常见错误包括:checked="true"、checked="checked"、甚至 selected(那是 <option></option> 用的)。虽然多数浏览器会兼容前两者,但语义错误,且某些严格解析环境(如服务端模板渲染、HTML 验证工具)可能报错或忽略。
服务端模板(如 Django、Thymeleaf、Nunjucks)中,要确保条件判断正确生成该属性,而不是拼出空字符串或 checked="" 后又被过滤掉。
为什么加了 checked 却没选中
最常见原因不是 HTML 写错了,而是 JS 或框架后续覆盖了初始状态:
立即学习“前端免费学习笔记(深入)”;
- JS 脚本执行了
element.checked = false,比如在DOMContentLoaded之后重置表单 - Vue 中写了
<input type="checkbox" checked v-model="flag">——checked被完全忽略,只看flag初始值是否为true - React 中用了
defaultChecked但没配checked+onChange,导致变成非受控组件,用户点击后状态脱钩 - 元素是动态插入 DOM 的(如通过
innerHTML或createElement),但插入前就设置了.checked = true,此时无效,必须先挂载再赋值
JS 动态设置 checked 的正确姿势
操作 .checked 属性是唯一可靠方式,它同步 DOM 状态、影响表单提交、触发浏览器原生互斥逻辑(对 radio 组)。
把任意文章或文档内容转换成精美的全屏翻页 HTML 演示文件(幻灯片风格)。当用户发来一篇文章、文档链接、Markdown 内容、或粘贴的文本,并且希望生成演示用的 HTML 时触发。支持任意内容来源:iWiki 链接、KM 链接、本地文件路径、直接粘贴的文本。生成的 HTML 文件保存到本地工作区,并通过企微直接发送给用户。触发词示例:帮我把这篇文章做成PPT、转成演示文档、生成HTML幻灯片、做个演示、转成可以演示的格式、article to deck、make a slide。
别用 setAttribute('checked', '')——这只是设置 HTML 属性,不会改变真实选中状态,也不会让同组 radio 自动取消选中。
需要注意的细节:
-
document.querySelector('input[name="theme"][value="dark"]').checked = true:对 radio 组,设一个为true,同名其他自动变false - 如果依赖
change事件驱动业务逻辑(比如校验、联动显示),单纯赋值.checked = true不会触发事件;应改用element.click(),或手动dispatchEvent(new Event('change', { bubbles: true })) - 避免在循环中对多个 radio 反复
click(),容易造成重复提交或 UI 抖动
表单提交时 checked 状态如何影响数据
只有当前 .checked === true 的控件才会出现在 FormData 或传统表单提交的请求体中。未选中的控件,无论有没有 checked 属性,都不传值。
关键细节:
- 复选框若未选中,对应字段彻底消失(不是
hobby=,而是连键都没有) - 单选框同一
name组中,若全都没.checked === true,则该name完全不提交 - 用
formdata.get('hobby')只能取到第一个选中的复选框值;要取全部,得用formdata.getAll('hobby')
这个行为是浏览器原生机制,和框架无关——哪怕你在 Vue 里绑了 v-model,最终提交仍取决于 DOM 元素的真实 .checked 状态。


















