发布于 2026-01-06 2 阅读
0

菲尔德塞特,这个陌生人。

菲尔德塞特,这个陌生人。

字段?什么?没错,它依然存在,只是似乎没人记得它了。这家伙是一个活生生的标准表单元素,用来表示表单内的一组元素,或者将相关元素(例如标签、输入框、计量器、段落等等)分组……而且它的功能远不止于此,它还可以嵌套,并包含任何类型的元素。

你还感兴趣吗?那我再告诉你两件事:它还可以接受三个非常有用的 HTML 属性,帮助你创建漂亮的表单;而且……它可不只是用来包裹单选按钮的!😱

规格

fieldset 元素表示一组组合在一起的表单控件(或其他内容),可以选择性地添加标题。标题由fieldset 元素的第一个子元素legend (如果有)提供。

WHATWG

这个元素的用途和使用时机非常明确。如上所述,它还可以接受三个属性:formnamedisabled

形式

此属性允许您将一组输入项关联到特定的表单元素,该元素不能是其父元素。这意味着您可以解决表单无法嵌套的问题。

姓名

要在form.elements API中使用的组的名称

已禁用

这是按钮和输入框中使用的全局属性,它会立即禁用所有子元素。

用例

我们来看一个实际的例子,创建一个带有复选框控制的禁用部分的表单。在这个表单中,我们将使用标签、输入框和输出元素,并且可以通过充分利用字段集属性和一些 JavaScript 代码来构建它。

<form id="calculatorForm">
  <fieldset>
    <input type="checkbox" id="enableCalc">
    <label for="enableCalc">Enable calc</label>
  </fieldset>

  <fieldset name="calculator" disabled>

    <!-- Default formula -->
    <fieldset name="defaultcalc">
      <input type="checkbox" id="default" checked>
      <label for="default">Use default calculation</label>
    </fieldset>

    <!-- Custom formula -->
    <fieldset name="customcalc" disabled>
      <label>Use custom calculation</label>
      <input type="number" value="50" id="c">+
      <input type="number" value="50" id="d">=
      <output id="x" for="c d">100</output>
    </fieldset>

  </fieldset>
</form>
Enter fullscreen mode Exit fullscreen mode

在这个例子中,我们有一个名为“calculator”的表单,该字段集默认处于禁用状态。选中复选框后,enableCalc计算器区域将被启用。以下是实时演示。

抛开 JavaScript 集成不谈,重点在于fieldset元素本身。它是实时的、标准的,而且非常实用。

来自……的“糟糕”例子

以下示例既非错误也非正确,但为什么不打破这种“不太好的做法”的循环,开始像我们不断改进 JavaScript 代码一样改进我们的代码呢?

Twitter Bootstrap

<div class="form-group">
  <label for="formGroupExampleInput">Example label</label>
  <input type="text" class="form-control" id="formGroupExampleInput">
</div>
Enter fullscreen mode Exit fullscreen mode

ZURB基金会

<div class="input-group">
  <input class="input-group-field" type="url">
  <div class="input-group-button">
    <input type="submit" class="button" value="Submit">
  </div>
</div>
Enter fullscreen mode Exit fullscreen mode

材料设计组件

<div class="mdc-form-field">
  <div class="mdc-checkbox">
    <input type="checkbox" id="my-checkbox" class="mdc-checkbox__native-control"/>
    <div class="mdc-checkbox__background">
      ...
    </div>
  </div>
  <label for="my-checkbox">This is my checkbox</label>
</div>
Enter fullscreen mode Exit fullscreen mode

Tailwind CSS

<div class="mb-4">
  <label class="block text-grey-darker" for="username">Username</label>
  <input id="username" type="text" placeholder="Username">
</div>
Enter fullscreen mode Exit fullscreen mode

正如你所见,许多流行的框架并没有使用 fieldset(Bootstrap 提到过,但仅此而已)作为表单元素容器,这真的很奇怪,因为 HTML 已经包含了构建网页和应用程序所需的所有工具。我们不应该重复创建平台已经提供的功能,而应该学习它,并最终学习如何扩展它,例如使用Web 组件

文章来源:https://dev.to/equinusocio/fieldset-this-stranger-55pf