Skip to content

[fields] 只读态的 group-labelled 字段:description 的 IDREF 同样没有消费者(#3990 修的是「名」,这条是「描述」) #4005

Description

@yinlianghui

#3990(PR #4002)的逐 widget 实测中量到的另一条,与那个 PR 无关也不由它引入,而是同一族的另一半:名(aria-labelledby)已在 #4002 里接上,描述(aria-describedby)在只读态仍然是「发了 id 没人引用」。单独立单。

Blocked-by: #3990(PR #4002)—— 见下「为什么现在才好修」。

实测

一次性 probe(未提交),真 form renderer + 裸注册 labelling: 'group',字段带 description: 'Some help',数「引用 …-form-item-description 这个 id 的元素个数」:

checkboxes  editable   descEl=SET  describedbyConsumers=1  consumerTags=[div[group]]
checkboxes  readonly   descEl=SET  describedbyConsumers=0  consumerTags=[]
radio       editable   descEl=SET  describedbyConsumers=1  consumerTags=[div[radiogroup]]
radio       readonly   descEl=SET  describedbyConsumers=0  consumerTags=[]
address     editable   descEl=SET  describedbyConsumers=1  consumerTags=[input]
address     readonly   descEl=SET  describedbyConsumers=0  consumerTags=[]

即:FormDescription 元素照常渲染、照常带 id(descEl=SET),可编辑态有 1 个消费者,只读态 0 个。可见的帮助文本在只读态与它描述的那个字段之间没有任何程序化关联。

机理

FormControl 是 Radix Slot,把 id / aria-describedby / aria-invalid 递给它包的那个 child(packages/components/src/ui/form.tsx:118-127)。

为什么现在才好修(不是当时该顺手做的)

#4002 之前只读面根本没有一个可承载的 role:role-less 的 div / span 上 aria-describedbyaria-labelledby 一样是空转。#4002 之后只读面有了 role="group",而 group 一个合法的描述承载者 —— 辅助技术进入一个 group 时会宣读它的名与描述,不需要里面有可聚焦控件。所以「只读面该不该带 aria-describedby」这个问题现在才有一个明确的、能落地的答案,而当时按 #3990 的范围(把「名」接上)刻意留窄是对的。

未实测(不要按本单推断)

处置方向(未裁决)

参考

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions