Skip to content

FieldSet 字段组 ​

一组相关表单项的容器,相当于原生的 <fieldset> + <legend>:legend 插槽是整组的标题, 也是这一组(role="group")的可访问名。组内的项纵向排开,间距 24px;标题与第一项之间 12px。

基础用法

legend 插槽是整组的标题(role=group 的可访问名),组内用 pt-field-group 排开若干表单项。

<pt-field-set>
  <span slot="legend">收货地址</span>
  <pt-field-group>
    <pt-field>
      <span slot="label">街道</span>
      <pt-input placeholder="街道与门牌号"></pt-input>
    </pt-field>
    <pt-field>
      <span slot="label">城市</span>
      <pt-input></pt-input>
    </pt-field>
  </pt-field-group>
</pt-field-set>

整组禁用 ​

整组禁用与标签样式

disabled 像原生 fieldset 一样禁用组内所有控件;legend-variant="label" 把标题降到与表单项标签同级。

<pt-field-set disabled legend-variant="label">
  <span slot="legend">通知方式</span>
  <pt-field orientation="horizontal">
    <pt-checkbox checked></pt-checkbox>
    <span slot="label">邮件</span>
  </pt-field>
  <pt-field orientation="horizontal">
    <pt-checkbox></pt-checkbox>
    <span slot="label">短信</span>
  </pt-field>
</pt-field-set>

disabled 与原生 <fieldset disabled> 一样禁用组内所有表单控件与按钮(kit 控件、pt-button、pt-toggle、 pt-toggle-group、pt-radio、原生 input / select / textarea / button),组内的 pt-field 也跟着变淡。 禁用期间新加入的元素同样会被禁用,与原生禁用控件一样不随表单提交、不参与校验。嵌套时外层禁用覆盖内层 (内层组的 aria-disabled 也跟上)。

组内的 kit 元素经一条独立的继承通道禁用:组写的是它们的 inherited-disabled attribute,控件的有效禁用是 自己的 disabled 与它的并集。组不改写控件自己的 disabled —— 组禁用期间照常读写、受控绑定照常生效, 读 el.disabled 得到的始终是应用自己写的值;组解禁后控件回到它自己的状态。inherited-* 由组与表单项维护, 属于内部通道,不要在应用里直接写。

组内的原生控件

原生 input / select / textarea / button 只认原生 disabled,组只能直接写它:组禁用期间它的 disabled 被应用撤掉会被补回;组解禁时只移除组自己加上的,本来就禁用着的保持不变。但组禁用期间应用再把它设为 true 是一次无变化的写入,组观测不到,组解禁时会一并移除 —— 需要原生控件在组解禁后仍禁用,就在组解禁之后再写, 或在组禁用之前写好。组内要长期单独禁用的控件,优先用 kit 控件。

为什么不直接用原生 <fieldset>:它的 disabled 只作用于 DOM 后代,管不到通过插槽投影进来的元素, 而且渲染出的 <legend> 有一套特殊排版。组件用 role="group" + aria-labelledby 表达同样的语义。

标题样式 ​

legend-variant标题用途
legend默认。16/24、中等字重分区标题,如「收货地址」「账户信息」
label14/20、中等字重,与表单项标签同级一组选项的总标签,如一组复选框的题目

API ​

属性

属性Attribute类型默认值说明
disableddisabledbooleanfalse禁用组内所有表单控件、按钮与 pt-field(与原生 `<fieldset disabled>` 一致,包括后加入的)。 kit 元素经继承通道禁用,组内控件自己的 `disabled` 不受影响:组禁用期间照常读写,组解禁后回到它自己的值。 组内的原生 input / select / textarea / button 例外(只能直接写它们的 `disabled`),见文档
inheritedDisabledinherited-disabledbooleanfalse外层 pt-field-set 下发的禁用(嵌套字段组)。内部继承通道:由外层以 attribute 维护,不建议使用方直接写。 有效禁用是 `disabled` 与它的并集
legendVariantlegend-variant"label" | "legend"'legend'标题样式:`legend` 16/24,作为分区标题;`label` 14/20,与表单项标签同级

插槽

名称说明
(默认)组内内容:pt-field、pt-field-group、pt-separator……纵向排列,间距 24
legend标题

可定制的内部元素(::part())

part说明
baserole=group 的外层
content组内内容的纵向排列容器
legend标题

Apache-2.0 协议开源