readonly能提交而disabled不能,因为disabled使元素完全脱离表单交互流程、不参与序列化且值被浏览器忽略;readonly仅禁止编辑,仍可聚焦、选中、复制,其name和value会正常随表单提交。

用 readonly 属性,而不是 disabled。
为什么 readonly 能提交而 disabled 不能
两者都会让 input 不可编辑,但底层行为完全不同:
- disabled:元素完全脱离表单交互流程,值不会被收集、不参与序列化、不触发任何事件
-
readonly:仅阻止用户手动修改内容,元素仍保持可聚焦、可选中、可提交;其
name和value会正常随表单一起发送到服务器
实际写法示例
直接在 input 标签中添加 readonly(布尔属性,无需赋值):
提交后,后台能收到 order_id=ORD-2026-8891。
注意几个常见误区
- 不要混用
readonly和disabled—— 后者会覆盖前者,导致值无法提交 - 如果需要“视觉上禁用但逻辑上可用”,避免用
pointer-events: none+disabled,这会彻底切断交互和提交 - JavaScript 动态设置时,用
input.readOnly = true(注意大小写是readOnly,不是readonly)
什么情况下该用 readonly
适用于这些典型场景:
- 订单号、流水号等系统生成且不可改,但需随表单提交
- 从其他字段联动计算出的只读结果(如总价 = 单价 × 数量)
- 用户确认前展示预填信息,允许复制但禁止修改











