Skip to content
← Back to rules

jsx-a11y/no-noninteractive-tabindex 正しさ

何をするか

このルールは、インタラクティブでない要素に、キーボードナビゲーションによってインタラクティブになる可能性がある tabIndex が設定されていないかをチェックします。

なぜ問題なのか

タブキーによるナビゲーションは、ページ上で操作可能な要素に限定されるべきです。 したがって、たとえば順序なしリスト内の項目に tabindex を追加してアクセシブルテクノロジー経由でのナビゲーションを可能にする必要はありません。

これらのアプリケーションは、すでにページの構造(HTML)に基づいてナビゲーション機構を提供しています。 一般的に、ページのタブリング(tab ring)のサイズを小さくするよう努力すべきであり、逆に拡大してはいけません。

このルールに対する誤りの例:

jsx
<div tabIndex="0" />
<div role="article" tabIndex="0" />
<article tabIndex="0" />
<article tabIndex={0} />

このルールに対する正しい例:

jsx
<div />
<MyButton tabIndex={0} />
<button />
<button tabIndex="0" />
<button tabIndex={0} />
<div />
<div tabIndex="-1" />
<div role="button" tabIndex="0" />
<div role="article" tabIndex="-1" />
<article tabIndex="-1" />

設定

このルールは以下のプロパティを持つ設定オブジェクトを受け入れます:

allowExpressionValues

type: boolean

default: true

true である場合、tabIndex の値に式(例:変数、三項演算子)を使用することを許可します。false である場合、文字列リテラルのみが許可されます。

roles

type: string[]

default: ["tabpanel"]

インタラクティブと見なすべき ARIA ロールの配列です。

tags

type: string[]

default: []

インタラクティブと見なすべきカスタム HTML 要素の配列です。

使用方法

このルールを有効にするには、設定ファイルまたは CLI で次のように使用できます:

json
{
  "plugins": ["jsx-a11y"],
  "rules": {
    "jsx-a11y/no-noninteractive-tabindex": "error"
  }
}
bash
oxlint --deny jsx-a11y/no-noninteractive-tabindex --jsx-a11y-plugin

参照