components icon indicating copy to clipboard operation
components copied to clipboard

bug(mat-select): The selection is repeated twice (+) in screen readers

Open dario-piotrowicz opened this issue 3 years ago • 3 comments
trafficstars

Is this a regression?

  • [ ] Yes, this behavior used to work in the previous version

(I have honestly no idea)

Description

The selection of a basic mat-select gets read multiple time by screen readers, for example this is how it is presented by the chrome accessibility tree (note the two "Pizza"s there):

Screenshot at 2022-05-09 21-52-28

In voiceOver the value is actually read once as the select value and twice as the label, so it actually gets read three times as you can see here:

https://user-images.githubusercontent.com/61631103/167498553-c13866bb-ae13-4fa4-96dc-2b52e23c99b9.mp4

I believe that the issue is caused by assigning to the labelledby both the label and the first selected value, as you can see here: Screenshot at 2022-05-09 21-55-13

(note from the video that this does not happen when using native selects)

Reproduction

Any basic mat-select seems to present this, for example the ones presented in the material docs: https://material.angular.io/components/select/overview

Expected Behavior

I would expect it to work precisely as the native select elements as that should in theory be the cleanest behavior, if not at the least I would expect the selections not to be read multiple times

Actual Behavior

the selection gets read multiple times, 2 or 3 times depending on the screen reader

Environment

  • Angular: 13.3.6
  • CDK/Material: 13.3.6
  • Browser(s): Chrome
  • Operating System (e.g. Windows, macOS, Ubuntu): Ubuntu and macOS

Extra

  • I tried looking for an issue describing the same bug, but I could not find any, sorry if there is one and I missed it
  • I am pretty sure this is not how it should work, sorry if I'm wrong

dario-piotrowicz avatar May 09 '22 21:05 dario-piotrowicz

any updates on this issue?

GorelovNA avatar Jul 01 '22 13:07 GorelovNA

@zarend , for the fix I can suggest:

  1. Replacing label tag with div tag and removing the 'for' attribute from it. 'Label' only works for native html (select and input tags), it doesn't work for mat-select even if it has a role="combobox". The 'for' attribute is creating an unnecessary link to the field since aria-labelledby already refers to the inner text of the label (hopefully changing to div) element.

  2. Remove the second id in the aria-labelledby as the screen reader already is capturing the value of the dropdown through javascript.

Joeh89 avatar Jul 20 '22 13:07 Joeh89

Seam like nothing, but it is pretty hard to use a form with many mat-select with VoiceOver (surcharge of information). Do we have any updates or timeline on this ?

potremblay avatar Sep 27 '22 14:09 potremblay

Hey there any updates?

RobinBomkamp avatar Jun 19 '23 07:06 RobinBomkamp