【发布时间】:2023-03-16 08:27:01
【问题描述】:
我有一个 Angular Material mat-radio-group。当我使用 Apple 的 VoiceOver 对其进行测试时,它会将每个单选标签读取为“[标签] 和另一个项目”
例如,
<mat-radio-button value="envelope">Envelope</mat-radio-button>
在聚焦时被大声读出为“信封和另外一项”。为什么?
这是整套:
<mat-radio-group aria-label="My Package Type" [(ngModel)]="myPackageType" class="radio-package-type mat-radio-small">
<mat-radio-button value="box">Box</mat-radio-button>
<mat-radio-button value="envelope">Envelope</mat-radio-button>
<mat-radio-button value="irregular">Irregular</mat-radio-button>
</mat-radio-group>
这是从开发工具复制的渲染 HTML:
<mat-radio-group
_ngcontent-gkg-c241=""
role="radiogroup"
aria-label="My Package Type"
class="mat-radio-group radio-package-type mat-radio-small ng-pristine ng-valid is-value ng-touched"
ng-reflect-model="box"
><mat-radio-button
_ngcontent-gkg-c241=""
value="box"
class="mat-radio-button mat-accent mat-radio-checked"
ng-reflect-value="box"
tabindex="-1"
id="mat-radio-2"
><label class="mat-radio-label" for="mat-radio-2-input"
><div class="mat-radio-container">
<div class="mat-radio-outer-circle"></div>
<div class="mat-radio-inner-circle"></div>
<input
type="radio"
class="mat-radio-input cdk-visually-hidden"
id="mat-radio-2-input"
tabindex="0"
name="mat-radio-group-0"
value="box"
/>
<div
mat-ripple=""
class="mat-ripple mat-radio-ripple mat-focus-indicator"
ng-reflect-trigger="[object HTMLLabelElement]"
ng-reflect-disabled="false"
ng-reflect-centered="true"
ng-reflect-radius="20"
ng-reflect-animation="[object Object]"
>
<div class="mat-ripple-element mat-radio-persistent-ripple"></div>
</div>
</div>
<div class="mat-radio-label-content">
<span style="display: none;"> </span>Box
</div></label
></mat-radio-button
><mat-radio-button
_ngcontent-gkg-c241=""
value="envelope"
class="mat-radio-button mat-accent"
ng-reflect-value="envelope"
tabindex="-1"
id="mat-radio-3"
><label class="mat-radio-label" for="mat-radio-3-input"
><div class="mat-radio-container">
<div class="mat-radio-outer-circle"></div>
<div class="mat-radio-inner-circle"></div>
<input
type="radio"
class="mat-radio-input cdk-visually-hidden"
id="mat-radio-3-input"
tabindex="0"
name="mat-radio-group-0"
value="envelope"
/>
<div
mat-ripple=""
class="mat-ripple mat-radio-ripple mat-focus-indicator"
ng-reflect-trigger="[object HTMLLabelElement]"
ng-reflect-disabled="false"
ng-reflect-centered="true"
ng-reflect-radius="20"
ng-reflect-animation="[object Object]"
>
<div class="mat-ripple-element mat-radio-persistent-ripple"></div>
</div>
</div>
<div class="mat-radio-label-content">
<span style="display: none;"> </span>Envelope
</div></label
></mat-radio-button
><mat-radio-button
_ngcontent-gkg-c241=""
value="irregular"
class="mat-radio-button mat-accent"
ng-reflect-value="irregular"
tabindex="-1"
id="mat-radio-4"
><label class="mat-radio-label" for="mat-radio-4-input"
><div class="mat-radio-container">
<div class="mat-radio-outer-circle"></div>
<div class="mat-radio-inner-circle"></div>
<input
type="radio"
class="mat-radio-input cdk-visually-hidden"
id="mat-radio-4-input"
tabindex="0"
name="mat-radio-group-0"
value="irregular"
/>
<div
mat-ripple=""
class="mat-ripple mat-radio-ripple mat-focus-indicator"
ng-reflect-trigger="[object HTMLLabelElement]"
ng-reflect-disabled="false"
ng-reflect-centered="true"
ng-reflect-radius="20"
ng-reflect-animation="[object Object]"
>
<div class="mat-ripple-element mat-radio-persistent-ripple"></div>
</div>
</div>
<div class="mat-radio-label-content">
<span style="display: none;"> </span>Irregular
</div></label
></mat-radio-button
></mat-radio-group
>
【问题讨论】:
-
您能否将输出的 HTML 粘贴到您的问题中,在您的问题中看起来不错,但我怀疑生成的标记不太正确或添加了导致此行为的其他项目。
-
添加到问题中
-
很难从它创建的混乱 HTML 中分辨出来,但我注意到标签包裹着所有东西,但也与
for="mat-radio-3-input"相关联,这可能会导致奇怪的行为。此外,因为标签包裹在所有东西上,原因很可能是“涟漪”,但我需要看看它是如何根据焦点、检查等变化的。很抱歉很痛苦,但你有可能把它变成小提琴,所以我可以检查一些东西,稍微摆弄一下,然后返回的不仅仅是有根据的猜测。
标签: angular accessibility angular-material2 voiceover