-
Notifications
You must be signed in to change notification settings - Fork 160
Description
Description
The JAWS screen reader does not distinguish between checked and non-checked list items for the comboBox.
Note: Re-opening bug ticket closed on June 6, 2025. (Ref: #15843 (comment)). Providing an alternative solution in this ticket.
- igniteui-angular version: latest
- browser: Chrome & Edge (works in Firefox)
Steps to reproduce
- In Chrome or Edge browser, open Infragistics sample page for ComboBox: https://www.infragistics.com/products/ignite-ui-angular/angular/components/combo
- Launch JAWS screen-reader
- Navigate using keyboard only to ComboBox example
- Select and deselect several options
- Continue navigating up and down the selection list
- Listen to announcement from screen reader
Result
- JAWS = no distinction from selected or not selected items
- NVDA = only the state of unselected items are announced
Expected result
Selected options should be indicated by the screen reader. Currently, there is no way to distinguish between selected or unselected items in the ComboBox using JAWS with Chrome or Edge.
Note: NVDA announces the "unselected" items but not the "selected" items.
Problem
This is a known defect with Chrome and JAWS: (https://issues.chromium.org/issues/337904204, FreedomScientific/standards-support#733).
Since the aria-selected is not working properly, I am providing an alternative solution
Solution
- Remove aria-label from
<igx-combo-item>(allowing the screen-reader to announce the text content within this element. - On
<span class="igx-checkbox__composite">(or directly to the<svg>) add: role="img" , then... - Dynamically update the aria-label of this element:
IF checked, dynamically add: aria-label="checkbox checked"
ELSE dynamically add: aria-label="checkbox not checked"
Alternately, you could use or aria-label="graphic of unchecked checkbox" or aria-label="graphic of checked checkbox"
Note on the use of role="listbox"
The placement of aria-multiselectable is incorrect on the ComboBox. aria-multiselectable and role="listbox" should go on the same element. (Also, aria-labelledby should be an ID, not a string)
Note on toggle button
Also, the toggle button has no accessible label by default, and there is no aria-expanded and aria-controls on the toggle button. These are used on the existing input, so it's just a matter of duplicating that functionality on the toggle button.
To Fix the existing toggle button:
- Add: aria-label="Toggle menu" to the
<igx-suffix class="igx-combo__toggle-button">(this would be a minimum fix, an improvement would be: aria-label="Toggle menu for {{label_of_input}}" and use the label text in there. This decreases the possibility that multiple "Toggle menu" buttons appearing on the same page. Which is also considered an accessibility issue. - Add: aria-expanded="{{ true | false }}" on this toggle button to reflect the current state of the menu. Next...
- Add: aria-controls={{ igx-drop-down-XX-list }} (set to the ID of the dropdown container)
Current:
