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

入力の途中で読まれてしまうか、まったく読まれないエラーメッセージ

メール欄のエラーをキーごとにアラートで送ると入力の途中で読まれてしまい、欄を離れたときに黙って出すと、まったく読まれない

WCAG 2.2
SC 4.1.3AA· 2.1 で追加SC 3.3.1A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり email.addEventListener('input', check);
アクセシビリティの問題を示した図: 全盲:まだ打っている途中なのに?
01

問題

スクリーンリーダーの利用者は、メールアドレスを入力している途中でエラーを聞かされるか、離れた欄に残ったエラーをまったく聞けない

02

試してみる

「sam@shop,com」をカンマのまま入力し、Tabキーを押して読み上げを聞いてみましょう

  • 問題1: キーを押すたびにアドレスを確かめ、エラーをアラートで送ります。最初に読まれるのはいつで、入力の途中で何回読まれますか?

  • 問題2: 欄を離れたときにアドレスを確かめます。Tabキーのあと、エラーは読まれますか? Shift + Tabで戻ると、欄はエラーと一緒に読まれますか?

  • 修正を適用します。 「欄を離れたとき」では、入力中は何も読まれず、Tabキーのあとにエラーが一度だけ読まれます。「入力が止まったとき」では、アドレスの途中で1秒手を止めてみてください。

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

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

(メール欄に入力してください)

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

03

修正方法

入力を終えてから確かめ、エラーは一度だけ伝える

修正前

キーごとに確かめ、アラートで送るエラー

<label for="email">メールアドレス</label><input type="email" id="email" name="email" required aria-describedby="email-error"><p id="email-error" role="alert"></p>…
問題点3点

メッセージの文言は正しく、欄とも結び付いています。問題は、読まれるタイミングです。

  • キーを押すたびに確認が動くため、打ち終えていないアドレスの1文字目でエラーが出ます。
  • 入力のあいだに正しくなったり誤りに戻ったりするたびに出たり消えたりし、出るたびにまた読まれます。
  • アラートとして送られるため、打っている文字に重なって読まれることがあります。
修正後

欄を離れたときに確かめ、一度だけ伝える

<label for="email">メールアドレス</label><input type="email" id="email" name="email" required aria-describedby="email-error"><p id="email-error" role="status"></p>…
修正の手順4ステップ
  1. 確認は change で動かします。change は値が変わったあとで欄を離れたときに発生するため、キーを押しているあいだは確かめません。誰も入力していない欄をTabで通り過ぎても、誤りとはされません。
  2. メッセージの段落に role="status" を付け、最初から空のままページに置きます。控えめな領域なので、エラーはスクリーンリーダーが今の読み上げ(多くは次の欄の名前)を終えてから一度だけ読まれるはずですが、次の欄の名前に遮られることもあります(「制限」を参照)。
  3. 欄の aria-describedby で段落を指し、同じ処理の中で aria-invalid を設定します。欄に戻ると、無効な入力としてエラーと一緒に読まれます。
  4. メッセージは変わったときだけ書き込み、input ではアドレスが正しくなったときに消すだけにします。直せばエラーはすぐに消え、キーを押しているあいだに新しく読まれるものはありません。

これで修正前の二つの問題はどちらも直り、4.1.3と3.3.1を満たします。エラーは、利用者がその欄の入力を終えたあとに、フォーカスを動かさずに一度だけ伝わり、欄とも結び付いたままです。

混同しやすいもの
04

デザインの案

エラーは軽やかに見せたまま、言葉にして、ちょうどよいときに伝えられる

欄のエラーの4通りの描き方です。それぞれに誤りを含めて入力し、Tabキーか「次へ」を押してみてください。2つは手を止めたあとに何が誤りかを言葉で伝え、2つは一度も言葉にしません。

デザインファイルで

  • ヒントだけの状態、離れたあとにエラーが出た状態、直したあとの状態と、各欄を3通り描く。
  • 各エラーの横に、出るタイミングを書く。欄を離れたときか、新しいパスワードのように条件に近づいていく欄なら、1秒手が止まったとき。
  • エラーは欄の下に、何を入力すればよいかを言葉で書く。赤い枠、アイコン、揺れは、言葉に添えるだけにする。
  • チェックリストには、手が止まったときに読まれる一文を書く。たとえば「3つの条件のうち2つを満たしています」。
  • エラーの色の横にコントラスト比を書く。文字は最低4.5:1。

合格

  • 領収書をこのアドレスにお送りします。

    エラーに変わるヒントの行 欄の下に、アドレスの用途を伝える灰色のヒント(6.31:1)があります。誤りを含めたまま欄を離れると、同じ行が警告アイコン付きの赤い文字(6.54:1)に変わって何を入力すればよいかを示し、枠は2ピクセルに太くなります。下の内容は動かず、ヒントとエラーはいつも同じ場所に出ます。この行は変わったときに一度読まれ、欄に戻ったときにも欄と一緒に読まれます。
  • 3つの条件をすべて満たしてください

    • 12文字以上
    • 数字を含む
    • 英大文字を含む
    入力に合わせてチェックが付くパスワードの条件 新しいパスワードの条件が欄の下に並び、満たした瞬間に、それぞれの空の丸に緑のチェック(6.35:1)が入ります。どこまで満たしたかは、キーを押すたびに目で分かります。一覧の上の「3つの条件のうち2つを満たしています」の行は、1秒手を止めたときにだけ変わり、スクリーンリーダーが読むのはこの行です。

不合格

  • 欄の中の×印かチェックだけで、言葉がないWCAG 3.3.1 1文字目から欄の右端に赤い×印が出て、アドレスが正しくなった瞬間に緑のチェックに変わります。素早く、すっきり見えますが、何が誤りで何を入力すればよいかは一度も言葉になりません。しかも×印は、まだ入力途中のアドレスにも出ます。欄の下に言葉を添え、×印は欄を離れてから出してください。
  • 揺れて赤くなる欄WCAG 3.3.1 誤りを含めたまま「次へ」を押すと、スマートフォンのロック画面のように欄が左右に揺れ、枠が赤くなります。揺れは変化を示し、0.5秒以内に止まるので、残してかまいません。ただ、何が誤りかは何も伝わらず、動きを減らす設定では赤い枠しか残りません。欄の下に言葉を添えてください。
05

修正の確認

4項目、マウス不要

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

4件中0件を確認済み

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

スクリーンリーダーでの role="alert"、role="status"、aria-describedby、aria-invalid="true"の読まれ方 · 実機で確認(2026年10月)

制限

フォーカスが移るときに書き込まれた控えめなメッセージは、スクリーンリーダーや次の欄の読み上げの長さによって、次の欄の名前のあとに読まれることもあれば、それに遮られることもあります。そのためエラーは欄とも結び付け、戻ったときに読まれるようにしています。このガイドは、ブラウザーの中で確かめる一つの欄を扱っています。メッセージの文言と、欄が誤りであることの示し方は直し方がわからないフォームエラーで、フォームを送ったときのエラーの一覧はどの欄が誤りか示さないエラー概要で、その場で送るフォームの結果は読み上げられないフォームの送信結果で扱っています。実際のフォームを、そのライブラリーやサーバー側の確認も含めて、利用者が使うスクリーンリーダーで確認してください。

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

EaseWebのサービス

修正した問題を、次のリリースで再発させない

このガイドのような修正方法を、コーディングエージェントが従うルールと、CIのチェックに組み込みます。あわせて定期的に、キーボードとスクリーンリーダーで手動の再テストを行います。

サービス内容を見る