Skip to content

The Tabs Widget cannot be activated using NVDA screen reader while navigating in brows mode #2365

Open

Description

@bpmohith

The Tabs Widget cannot be activated using NVDA screen reader while navigating in brows mode

Steps to Reproduce:

  1. Open Tabs Widget Example on Chrome Browser.
  2. Turn on NVDA screen reader.
  3. Start navigating with the 'h' quick navigation key till the NVDA focus reaches the Example > Demo heading.
  4. Start navigating with down arrow. When 'One' tab is active press down arrow till the NVDA focus moves to the 'Two' tab.
  5. Press enter and space key and observe.

Description:
NVDA is a screen reader. Users with blindness use to operate computer. All UI elements are required to be operable with screen reader. In the current scenario a blind screen reader user cannot activate tabs when navigating with the NVDA brows mode.
The tabs are actionable only with the focus mode. This causes lots of issues to screen reader users and many will not know how to switch from brows to focus mode just to activate a tab.
The APG Tab Example works fine with NVDA brows mode.
NVDA screen reader can be downloaded from:
https://www.nvaccess.org/download/

Activity

  1. mgol commented on Sep 5, 2025

    @mgol
    Member

    Thanks for the report. I was able to confirm this on a Windows 11 VM with NVDA. VoiceOver on macOS doesn't have the issue.

    This is something that I'd definitely want to fix.

  2. added this to the 1.14.2 milestone on Sep 5, 2025
  3. self-assigned this
    on Sep 5, 2025
  4. bpmohith commented on Sep 5, 2025

    @bpmohith
    Author

    @mgol
    Thank you for taking this up. Adding few more details hope this will be of some help.

    1. With JAWS screen reader on Chrome. If the user is in Forms mode off (Similar to NVDA brows mode) one needs to press enter or space twice to activate the jQuery UI tabs. Generally the tabs are expected to be activated with single press of enter / space key. The APG Example works as per the expected behavior.
    2. The aria-expanded attribute is not required for a Tab component. Only aria-selected is sufficient to indicate the state of the tab. Currently both aria-selected and aria-expanded are provided. This causes increased listening overhead to the blind screen reader users.

    Please suggest me if I have to make point of removing aria-expanded as a separate issue.

  5. mgol commented on Jan 26, 2026

    @mgol
    Member

    I had a look at VS Code tabs and they follow a similar structure for the tabs in the left sidebar:

    1. The top-level ul element with role=tablist
    2. Inside the ul, li elements with role=tab and both aria-expanded and aria-selected attributes
    3. Inside each li, a elements

    I'm not sure what we're doing differently here that VS Code; I suspect if this was causing a11y issues then they'd fix this long ago?

  6. mgol commented on Jan 26, 2026

    @mgol
    Member

    I'm a bit lost here. ARIA Authoring Practices Guide (APG) on the Tabs Pattern page links to two examples, but they all use buttons and we need links - which is needed as we support the "right click + open in a new tab" action on a tab to open in a new browser tab with the proper jQuery UI tab activated.

    I've also seen a page claiming that with role=tablist elements with role=tab must be immediate children, which would implicate lis have to have role=tab. But I don't know how trustworthy that page is.

    All in all, this seems more complex than I initially though. Given that jQuery UI is in maintenance mode, I need to park it, waiting for PRs that took all of that into account.

  7. removed this from the 1.14.2 milestone on Jan 26, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions