Skip to content
← Back to rules

jsx-a11y/no-autofocus Correctness

💡 A suggestion is available for this rule.

What it does ​

Enforce that autoFocus prop is not used on elements.

Why is this bad? ​

Autofocusing elements can cause usability issues for sighted and non-sighted users alike. It can be disorienting when focus is shifted without user input and can interfere with assistive technologies. Users should control when and where focus moves on a page.

Exceptions ​

<dialog> elements, elements with role="dialog", and elements with the popover attribute (and their descendants) are exempt, since directing focus into them when opened is the expected behavior. See MDN: <dialog> accessibility.

Examples ​

Examples of incorrect code for this rule:

jsx
<div autoFocus />
<div autoFocus="true" />
<div autoFocus="false" />
<div autoFocus={undefined} />

Examples of correct code for this rule:

jsx
<div />
<dialog><input autoFocus /></dialog>
<div role="dialog"><input autoFocus /></div>
<div popover><input autoFocus /></div>

Configuration ​

This rule accepts a configuration object with the following properties:

ignoreNonDOM ​

type: boolean

default: false

Determines if developer-created components are checked.

How to use ​

To enable this rule using the config file or in the CLI, you can use:

json
{
  "plugins": ["jsx-a11y"],
  "rules": {
    "jsx-a11y/no-autofocus": "error"
  }
}
ts
import { defineConfig } from "oxlint";

export default defineConfig({
  plugins: ["jsx-a11y"],
  rules: {
    "jsx-a11y/no-autofocus": "error",
  },
});
bash
oxlint --deny jsx-a11y/no-autofocus --jsx-a11y-plugin

Version ​

This rule was added in v0.0.19.

References ​