#5351·axe-core

aria-required-parent false positive for native <option role="option"> inside <select>

Author: jnurthenCreated Sep 9, 2026Updated Sep 19, 2026
Labelsfixrules

Product

axe-core

Product Version

4.12.1

Latest Version

  • I have tested the issue with the latest version of the product

Issue Description

Expectation

Native <option> elements inside a native <select> should not fail aria-required-parent, even when they include an explicit role="option".

Browsers already expose options through the native control’s accessibility tree (combobox with internal/slotted listbox ownership). The required parent context for option is provided by the UA, not by a DOM ancestor with role="listbox" or role="group".

Actual

axe reports aria-required-parent (critical) on each <option role="option"> inside a single-select <select>.

Axe maps single-select <select> to implicit role combobox, then treats explicit role="option" as requiring a DOM parent of listbox or group. Walking the DOM parent chain finds combobox, so the rule fails.

Removing the redundant role="option" attributes makes the violation disappear, which shows the failure is driven by the explicit role + DOM walk, not by a real missing listbox relationship in the accessibility tree.

How to Reproduce

Fails:

<!DOCTYPE html>
<html lang="en">
  <body>
    <select aria-label="Select a timeframe">
      <option value="current" role="option" selected>Current</option>
      <option value="previous" role="option">Previous</option>
    </select>
  </body>
</html>

Result with axe-core 4.12.1: 2 × aria-required-parent on the

Passes (same markup without explicit roles):

<!DOCTYPE html>
<html lang="en">
  <body>
    <select aria-label="Select a timeframe">
      <option value="current" selected>Current</option>
      <option value="previous">Previous</option>
    </select>
  </body>
</html>

Result: no aria-required-parent violations.

Additional context

  • Explicit role="option" on native <option> is redundant / generally invalid authoring (allowedRoles: false), but classifying it as a missing required parent is still a false positive for native <select>.
  • Suggested fix: skip aria-required-parent for <option> / <option role="option"> when owned by a native <select>, or treat native <select> as providing the required listbox context for its options.
  • The rule should continue to catch orphan custom role="option" widgets that are not inside a real listbox / group.