首页 / HTML5 入门教程 / fieldset legend 与 disabled/readonly

HTML5 入门教程

fieldset legend 与 disabled/readonly

本教程共 110 篇 · 第 64 篇 · 更新于 2026-07-28 · 约 4 分钟阅读

HTML5HTML5 入门教程表单fieldsetlegenddisabledreadonly表单分组

64. fieldset legend 与 disabled/readonly

本节目标:学会用 fieldset 分组表单,用 disabled/readonly 控制输入状态。

表单一长就乱。分组能让用户一项一项填,不会迷失。

fieldset:表单分组

把相关的表单控件包在一起,浏览器会给它加一个边框。

<fieldset>
  <legend>个人信息</legend>
  <label>姓名:<input type="text" name="name"></label>
  <label>年龄:<input type="number" name="age"></label>
</fieldset>

<fieldset>
  <legend>账号信息</legend>
  <label>邮箱:<input type="email" name="email"></label>
  <label>密码:<input type="password" name="pwd"></label>
</fieldset>

legend:分组标题

<legend> 是 fieldset 的标题,显示在边框的左上角。

<fieldset>
  <legend>收货地址</legend>
  <!-- 地址相关的输入框 -->
</fieldset>

legend 必须是 fieldset 的第一个子元素,否则显示位置可能不对。

disabled:禁用

禁用的控件变灰,不能点击、不能输入、不能提交。

<input type="text" name="code" value="AUTO-001" disabled>

禁用的字段:

  • 用户无法交互
  • 数据不会提交
  • 样式变灰

禁用整个组

<fieldset disabled>
  <legend>此功能暂未开放</legend>
  <input type="text" name="field1">
  <input type="text" name="field2">
</fieldset>

在 fieldset 上加 disabled,里面所有控件一起禁用。不用一个一个加。

readonly:只读

只读字段可以聚焦、可以选中复制,但不能修改。

<input type="text" name="order_no" value="ORD-20260728" readonly>

只读字段:

  • 用户可以聚焦
  • 用户可以选中文本复制
  • 用户不能修改
  • 数据会提交

disabled 和 readonly 的区别关键在于:数据会不会提交到服务器。readonly 会提交,disabled 不会。

两者对比

属性可聚焦可编辑数据提交样式
disabled变灰
readonly正常

什么时候用哪个

  • readonly:展示用户需要看到但不能改的订单号、用户ID
  • disabled:暂时不可用的功能、前置条件未满足的字段

配合 JavaScript 动态切换

// 禁用按钮直到用户勾选同意
const agree = document.getElementById('agree');
const submitBtn = document.getElementById('submitBtn');

agree.addEventListener('change', () => {
  submitBtn.disabled = !agree.checked;
});

用户不勾选同意按钮,提交按钮一直灰色不可点。

完整示例

<form>
  <fieldset>
    <legend>基本信息</legend>
    <p>
      <label>用户ID:
        <input type="text" name="user_id" value="U10086" readonly>
      </label>
    </p>
    <p>
      <label>姓名:
        <input type="text" name="name" required>
      </label>
    </p>
    <p>
      <label>邮箱:
        <input type="email" name="email" required>
      </label>
    </p>
  </fieldset>

  <fieldset>
    <legend>附加选项</legend>
    <p>
      <label>
        <input type="checkbox" name="newsletter" value="yes">
        订阅邮件通知
      </label>
    </p>
    <p>
      <label>优惠码:
        <input type="text" name="coupon" placeholder="请输入优惠码">
      </label>
    </p>
  </fieldset>

  <p>
    <button type="submit" id="submitBtn">提交</button>
  </p>
</form>

用户 ID 是只读展示,其他字段正常填写。两组信息清晰分开。