本文へ移動
easeweb
ご相談
トピックを検索

読み上げられないフォームの送信結果

メールマガジンの登録フォームをページ遷移なしで送信し、結果の「ありがとうございます。確認メールをお送りしました。」をただの段落に書き込む作りです。画面には結果が出ても、スクリーンリーダーでは読み上げられません。

WCAG 2.2
SC 4.1.3AA· 2.1 で追加
必須とする規格
EN 301 549(EU)
問題あり message.textContent = 'ありがとうございます。確認メールをお送りしました。';
アクセシビリティの問題を示した図: 全盲:ちゃんと届いた?
01

問題

スクリーンリーダーの利用者は「登録する」を押しても何も聞こえず、登録できたのか分からないため、もう一度送るか、あきらめます。

02

試してみる

「登録する」を押して、読み上げを聞いてください。

フォームの下に、スクリーンリーダーの読み上げが表示されます。結果は聞こえますか?「送信を失敗させる」をオンにして、もう一度、2回押してください。

問題あり 修正できますか?

問題ただの段落に書き込まれる結果

Fernhill Books

新刊は毎週木曜日に入荷します。営業時間は毎日9時から18時です。

スクリーンリーダーの読み上げ:

(「登録する」を押してください)

再現デモです。「問題あり」は意図的にアクセシブルでない状態にしています。

03

修正方法

結果は、送信前からページにあるステータス領域に書き込み、フォーカスは動かしません。

  1. 1結果は、送信前からページにあるステータス領域に書き込み、中身だけを変える。
  2. 2送信できた結果も、できなかった結果も、言葉で伝える。
  3. 3フォーカスはボタンに残す。メッセージへ移したり、送信中にボタンを無効にしたりしない。
修正前 ただの段落に書き込まれる結果
<section aria-labelledby="signup-title">  <h2 id="signup-title">メールマガジンに登録</h2>  <form id="signup">    <label for="signup-email">メールアドレス</label>    <input id="signup-email" name="email" type="email" autocomplete="email" required>    <button>登録する</button>  </form>  <p id="signup-message"></p></section>
修正後 フォームの下のステータス行
<section aria-labelledby="signup-title">  <h2 id="signup-title">メールマガジンに登録</h2>  <form id="signup">    <label for="signup-email">メールアドレス</label>    <input id="signup-email" name="email" type="email" autocomplete="email" required>    <button>登録する</button>  </form>  <p id="signup-message" role="status"></p></section>

この方法を選ぶ理由:メッセージは対象のそばに出す

AI コーディングアシスタントで修正しますか? このガイドを Markdown で取得、または全ガイドをコーディングエージェントで使う。

04

デザインの案

お礼の表示は、親しみやすさと読み上げを両立できます。

登録できたことを示す、3通りの描き方です。それぞれ「登録する」を押してみてください。2つは結果を言葉にしてスクリーンリーダーにも伝え、1つは絵でしか示しません。

デザインファイルで

  • 送信できたときと、できなかったときの2つのメッセージを、フォームの横に全文で書く。
  • メッセージはボタンの下に置く。押した人が次に見る場所だから。
  • 送信中にボタンに何を表示するかを、ラベルと同じ幅で、ボタンに見えるまま描く。
  • メッセージの色の横にコントラスト比を書く。文字は最低4.5:1。

合格

  • アドレスを添えた色付きのお知らせ 欄の下に、封筒のアイコンが付いた淡い青緑のお知らせが現れます。太字の「あと少しです。」に続き、店の文字色で「[email protected] にリンクをお送りしました。」(12.40:1)。アドレスを見せるので、打ち間違いにすぐ気づけます。文言は、押す前からあるステータス行に書き込みます。
  • 待ち時間を示すボタン サービスが応答するまで、「登録する」は幅と青緑(9.08:1)を保ったまま、小さく回る輪と「送信中…」を表示します。応答が来れば輪は止まります。結果はそのあと、フォームの下に店の文字色で表示し、ステータス行に書き込みます。フォーカスのあるボタンのラベルの変化は、環境によっては読まれないためです。

不合格

  • 紙吹雪と、チェックマークに変わるボタンWCAG 4.1.3 「登録する」が丸い青緑のチェックマークに縮み、紙吹雪が舞って1秒足らずで消えます。ごほうびのようで楽しいものの、結果が一度も言葉になりません。スクリーンリーダーには何も聞こえず、動きを減らす設定ではチェックマークだけが残ります。下のステータス行に文を書き込めば、見た目はそのまま残せます。
05

修正の確認

マウスを使わない4つの確認

確認方法: スクリーンリーダー、キーボード

4件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。フォームのコンポーネント、スクリプト、埋め込みを変更した際は、再度確認します。

制限

ライブリージョンの動きは、スクリーンリーダーやブラウザーによって異なります。このパターンは、その場で送信し、送信後もページに残る短いフォーム一つを扱っています。フォームをお礼の文に差し替えるデザインでは、フォーカスのあったボタンも消えるため、ステータス行だけでは足りず、お礼の文へフォーカスを移す必要があります。この場合は読み上げられないお礼の文に差し替わるフォームで扱っています。カートへの追加など、フォームではない操作についてはバッジしか変わらない「カートに入れる」ボタンで、その場で更新される検索結果については件数が読み上げられない検索・絞り込み結果で扱っています。埋め込みのフォームも含め、実際のフォームを、成功と失敗の両方で、利用者が使うスクリーンリーダーで確認してください。

よくある問題を再現した学習用のサンプルです。実在のクライアントの診断結果ではありません。コードは出発点となる実装例のため、実際の製品でも確認してください。ここでは支援技術でのテスト結果は報告していません。

コードを更新しても、使いやすさを保つために

ガイドの内容を、コーディングエージェントやCIで使える開発ルールにまとめます。更新後は、キーボードとスクリーンリーダーで再テストし、問題が再発していないか確認します。

再テストの進め方