前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库HTML readonly 与 disabled 区别
HTML表单与输入

readonly 和 disabled 在表单提交时有什么区别?

readonly 表示值可读但不能改,通常仍能获得焦点并随表单提交。disabled 表示控件不可用,通常不能聚焦,也不会作为成功控件提交。

前端进阶之旅 · 一题精讲更新于 2026.09.29
HTML#表单与输入#表单
先看核心答案读代码示例
理解线索

不可编辑与不可用不同

  1. readonly保留字段值但禁止用户修改
  2. disabled让控件退出正常交互与提交
  3. 成功控件表单提交时被收集的字段

readonly 不等于安全保护;用户仍能修改请求或脚本中的值。

核心回答

先记住这个答案

readonly 用于“值已确定但仍要展示和提交”的控件:用户不能改,但一般可聚焦、可复制,提交时仍包含该字段。disabled 表示控件当前不可用,通常不能聚焦,并且不会随表单提交。readonly 只适用于支持它的文本类或部分日期时间输入及 <textarea>,不能直接拿来让 <select> 只读。

  • readonly 值通常仍会提交
  • disabled 控件不提交
  • readonly 适用于部分输入和文本区
  • <select> 没有原生 readonly

订单编号需要展示还是排除

如果订单编号由服务端生成,只想在页面上显示,纯文本往往更清楚。若业务确实要在表单里保留它,readonly 可以让用户看见但不能在普通交互中改动;若用 disabled,提交时就不会包含该字段。

两种不可编辑状态HTML
<label>订单编号
  <input name="orderId" value="A1024" readonly>
</label>
<label>暂不可选的优惠码
  <input name="coupon" value="" disabled>
</label>

提交时前一个字段通常会带上 orderId=A1024,后一个禁用字段不会进入成功控件集合。界面上两者可能都呈灰色,但语义和数据流不同。 即使 readonly 值会被提交,服务端也不能相信它。用户可以通过开发者工具改 DOM 或直接发送请求;订单编号等关键值必须在服务端与会话数据核对。

支持范围与校验

readonly 不是所有控件通用的“锁”。单选、复选、滑块和 <select> 等不适合靠它阻止选择;应根据需求选择 disabled、纯文本展示或自定义交互方案。

禁用字段退出约束校验;只读字段也不按普通可编辑字段处理必填约束。若业务要求用户确认某项信息,光把控件设为只读或禁用不能算作完成确认,应提供独立的确认操作。

一个常见例子是订单编号:让用户看见但不改,可以用只读文本框;若只是展示信息而不需要继续提交,普通文本可能更合适。禁用字段不会进入正常表单提交,服务器无法依赖它回传原值;只读值虽然会发送,也不能成为权限或价格的依据。readonly 主要适用于可编辑文本类控件,复选框和下拉框并没有等价的只读状态,不能把它们简单写成 readonly 就期待浏览器阻止修改。

回答前,多想一步

容易答错的地方

用 disabled 保留提交值
禁用控件不会正常提交。若服务端需要该信息,应从可信状态取值,而不是依赖禁用字段。
给 <select> 写 readonly
<select> 没有原生只读模式。需要展示当前选择但禁止更改时,考虑禁用控件并在服务端保留值,或直接显示文本。
试着用自己的话回答

面试官还会怎么问?

只读输入还能复制内容吗?

通常可以聚焦并选择复制,这也是它与禁用控件的一个交互差异。

隐藏输入能替代禁用字段提交吗?

技术上可以传值,但隐藏值仍可被篡改,服务端不能把它当成可信来源。

required 放在只读字段上有意义吗?

只读字段不能由用户填写,通常不会按普通必填字段参与约束校验;应重新设计数据来源与确认流程。

从一道题,走向一组知识

把知识连起来

表单与输入

脚本提交表单时,requestSubmit() 和 submit() 差在哪?

requestSubmit() 提交时会按成功控件规则收集值。

表单与输入

required 在文本框、单选框和复选框上怎么校验?

required 对只读或禁用状态的适用性与普通可编辑字段不同。

参考资料

  • HTML:表单与输入参考资料

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 订单编号需要展示还是排除
  3. 支持范围与校验
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑