跳转到主内容
极星编程网:以代码为星,赴技术山海!

Bootstrap 按钮状态 disabled 与 readonly 区别

按钮必须用 disabled 而非 readonly,因后者不被支持;disabled 禁用交互且阻止表单提交,值不参与序列化,需配合 aria-disabled 保障可访问性。 disabled 能用在按钮上,readonly 根本不生效 按钮(
、
、
)**不支持
readonly
属性**。给按钮加
readonly="true"
完全没效果,点击照常触发,样式也不变,浏览器直接忽略该属性。 必须用
disabled
控制按钮的禁用状态。Bootstrap 会自动为
disabled
按钮添加灰阶背景、低透明度和
cursor: not-allowed
样式,同时阻止所有交互(点击、focus、键盘操作)。
disabled
是布尔属性:设为
true
即禁用,设为
false
或移除属性即启用 JS 动态控制推荐写法:
btn.disabled = true
(不是
btn.setAttribute('disabled', 'true')
) 禁用后按钮的
value
仍可读写,但不会参与表单提交——这点对
尤其关键 表单提交时,disabled 按钮的值压根不会发送 如果按钮是
,加了
disabled
后,整个字段(包括
name
和
value
)会被浏览器从序列化结果中剔除。FormData、URL 查询参数、原生 form.submit() 都不包含它。 这跟
readonly
无关——因为按钮根本不认
readonly
。但有人误以为“只读=值还在”,试图给按钮加
readonly
来保留提交标识,结果既没禁用成功,也没达到预期语义。 需要按钮禁用且不参与提交 → 用
disabled
需要按钮禁用但又想让后端知道“用户点了哪个按钮” → 不可行,得换方案(比如用隐藏域 + JS 提交前补值) 提交前临时禁用按钮防重复点击 → 必须用
disabled
,且建议配合 loading 状态视觉反馈 为什么不能对按钮用 readonly 模拟“只读”行为
readonly
的设计目标从来就不是按钮。它的语义是“内容可展示、可聚焦、可复制,但不可编辑”,而按钮没有“内容编辑”的概念。W3C 规范明确将
readonly
限制在
(仅
text
/
password
/
search
/
tel
/
url
/
email
/
number
)和