適用 (対象)
HTML 及び XHTML、スクリプト
これは達成基準 2.4.3: フォーカス順序に関する達成方法である。(書かれていない達成方法を満たす慣習的な達成方法)
解説
この達成方法の目的は、Document Object Model (DOM) に挿入されたユーザインタフェースの要素をタブ順序及びスクリーンリーダーの読み上げ順序がユーザエージェント標準のふるまいによって正しく設定されるような方法で配置することである。この達成方法は、メニューやダイアログのように隠れているものと表示されているもの、全てのユーザインタフェース要素に利用することができる。
スクリーンリーダーの読み上げ順序は、Document Object Model 内の HTML 又は XHTML の要素の順序に基づいており、それはタブ順序についても同様である。この達成方法では、新しいコンテンツを DOM のそのトリガーとなる要素の直後に挿入する。トリガーとなる要素は、リンク又はボタンでなければならず、スクリプトはその onclick イベントにより呼び出されなければならない。これらの要素はもともとフォーカス可能であり、その onclick イベントはデバイスに依存しない。フォーカスは選択された要素に残り、その後に挿入された新しいコンテンツは、タブ順序及びスクリーンリーダーの読み上げ順序の両方において、次の順番となる。
この達成方法は同期された更新にも利用できることに注目して欲しい。(AJAX と呼ばれることのある) 非同期の更新では、支援技術に非同期のコンテンツが挿入されたことを通知するために追加の達成方法が必要となる。
WAIC では SCR26 に関するアクセシビリティ・サポーテッド(AS)情報を提供している。
2014 年 6 月版のアクセシビリティ・サポーテッド(AS)情報: SCR26 では、「達成可能」と評価されている。WAIC はこの達成方法が検証した環境で広く動作すると判断している。
事例
事例 1
この例では、リンクがクリックされた際にメニューを生成し、そのリンクの後に挿入する。リンクの onclick イベントは新しいメニューのための ID をパラメータとして渡す ShowHide スクリプトを呼び出すために使用される。
<a href="#" onclick="ShowHide('foo',this)">Toggle</a>
ShowHide スクリプトは新しいメニューを含む div を生成し、リンクを挿入する。最終行がスクリプトの核心となる。スクリプトのトリガーとなる要素の親を探し、新しい子として生成された div をそれに追加する。これにより、新しい div は DOM 内でリンクの次になる。利用者がタブを押したときには、フォーカスがメニュー内で最初のフォーカス可能な項目となる生成されたリンクに移動する。
function ShowHide(id,src) { var el = document.getElementById(id); if (!el) { el = document.createElement("div"); el.id = id; var link = document.createElement("a"); link.href = "javascript:void(0)"; link.appendChild(document.createTextNode("Content")); el.appendChild(link); src.parentElement.appendChild(el); } else { el.style.display = ('none' == el.style.display ? 'block' : 'none'); } }
CSS は div およびリンクをメニューのように見せるために利用される。
検証
手順
- ポップアップではないダイアログのトリガーとなる全てのエリアを探す。
- そのダイアログがボタン又はリンクのクリックイベントによりトリガーされる。
- スクリプトによって生成された DOM を調査できるツールを使って、ダイアログが DOM 内で次の位置にきている。
期待される結果
- 2. 及び 3. の結果が真である。