キーボード操作が可能なタブウィジェットの解説

キーボード操作が可能なタブウィジェットの解説

 ここからは、サンプルをキーボードで操作可能にするための実装方法を見ていきます。先に、図3を確認してください。このサンプルでは、左キー、右キー、タブキーによる操作が可能になっています。

 それでは、まずタブキーによる操作の実現方法から確認していきましょう。

 まず、に「tabindex="-1"」を指定します。こうすることで、TABキーを押してもにフォーカスがあたらないようになります。



 次にタブが選択された際(tabsselectイベント(
http://docs.jquery.com/UI/Tabs#Events)発生時)に、下記のようにして、全タブをTABキーでフォーカスがあたらないようにします。

$("span[role='tab']").attr('tabindex', '-1');

 フォーカスがあたらないようにした後、下記のように、選択されたタブだけ、TABキーによるフォーカスを可能にし、フォーカスをあてています。

$(ui.tab).find('span').attr('tabindex', '0').focus();

 同様に、下記のようにして、すべてのタブ内コンテンツをTABキーでフォーカスがあたらないようにします。

$('.ui-tabs-panel').attr('tabindex', '-1');

 フォーカスがあたらないようにした後、下記で、選択されたタブのタブ内コンテンツだけ、TABキーによるフォーカスを可能にします。

$(ui.panel).attr('tabindex', '0');

 ここまでで、アクティブなタブとタブ内コンテンツを、TABキーや、Shiftキー + TABキーで行き来することができるようになります。

左右矢印キーによるタブの切り替えの解説

 次に、左右矢印キーによるアクティブなタブの切り替えの実現方法を確認していきましょう。

 下記のようにして、タブにフォーカスがあたっている状態で、左矢印キーが押されれた場合の処理を記述します。

$("span[role='tab']").bind('keydown', 'left', function(e){
…処理…
}

 左右矢印キーが押された時の処理内容は次のようになります。

1.現在アクティブなタブを判定
2.次にアクティブにすべきタブを決定
3.そのタブをアクティブ化

 下記のようにして、現在アクティブなタブを判定します。

if ($(e.target).text() == '野菜') {
} else if ($(e.target).text() == '肉') {
} else if($(e.target).text() == '果物') {}

 「野菜」がアクティブだった場合、次にアクティブにすべきタブを次のように指定しています。

if ($(e.target).text() == '野菜') {
target = $("a:contains('果物')").get(0);
}

 同様に、「肉」「果物」がアクティブだった場合の、次にアクティブにすべきタブについてもロジックを記述します。

 最後に、アクティブにすべきタブに対して、jQueryのclick()(http://docs.jquery.com/Events/click)メソッドでクリック動作を発生させてタブのアクティブ化を行います。

$(target).click();

 ここまでで、左右矢印キーを押すと、タブが切り替わるようになります。

 以上で、キーボード操作の実現し、アクセシブルなタブウィジェットが完成しました。

 ここまでのソースコード全体をダウンロードしたファイル「tab-3.html」で確認してみましょう。

 これまでWAI-ARIAの概要から実践的な構築まで4回にわたり連載をしてきました。紹介した、ロール、ステート、プロパティはごく一部のものですが、これまで解説してきた知識があれば、ほかのものもそれほど苦労なく理解できると思います。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30