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

確保した座席が時間切れで解放されてしまう購入手続きのタイマー

チケットの購入手続きが選んだ座席を10分間だけ確保するため、その間に入力が終わらないと、どこまで進んでいても座席は解放され、フォームも空になってしまう

WCAG 2.2
SC 2.2.3AAA
必須とする規格
Section 508、EN 301 549、JIS X 8341-3 では必須ではない
問題あり seats.hold(seats, { minutes: 10 })
アクセシビリティの問題を示した図: 手の操作:あと少しだったのに、座席はどこへ?
01

問題

入力や読み取り、判断に時間がかかる人は、購入手続きのタイマーが切れると、座席も入力した内容も失う

02

試してみる

2席を予約し、入力に時間がかかったつもりで時間を進めて、注文に何が残るかを確かめてみましょう

ウィンドウの上のデモ用の時計は、経過する時間の代わりで、劇場のサイトの一部ではありません。「次へ」を押して購入手続きを始め、時間を進めてください。確保の時間が切れたら、座席を選び直してフォームを見てください。

修正を適用したら、1時間進めて「支払う」を押してください。

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

問題時間付きで確保する座席
デモ用の時計:「次へ」を押してから 0:00
Riverside Playhouse

The Lighthouse Keeper

11月14日(土)19:30

F列7番と8番 · $48.00

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

03

修正方法

座席は入力中ではなく、支払いの時点で確保する

修正前
問題時間付きで確保する座席
<p id="hold" data-expires="2026-11-14T18:40:00Z">座席を確保しています 残り<span id="hold-time">10:00</span></p><form method="post" action="/orders">  <input type="hidden" name="hold" value="h_81f2">  <label for="name">氏名</label>  <input id="name" name="name" autocomplete="name">  <label for="email">メールアドレス</label>  <input id="email" name="email" type="email" autocomplete="email">  <label for="access">配慮のご希望(任意)</label>  <textarea id="access" name="access"></textarea>  …  <button>$48.00を支払う</button></form>
問題点3点
  • 座席は、フォームの入力にどれだけかかっても、選んだ時点から10分間しか確保されません。
  • ゼロになると、ページは座席表へ戻り、座席は再び販売されます。
  • フォームに入力した内容は、ページと一緒に失われます。
修正後
修正支払いの時点で確保する座席
<p>座席は、お支払いの時点で確定します。</p><form method="post" action="/orders">  <input type="hidden" name="seats" value="F7,F8">  <label for="name">氏名</label>  <input id="name" name="name" autocomplete="name">  <label for="email">メールアドレス</label>  <input id="email" name="email" type="email" autocomplete="email">  <label for="access">配慮のご希望(任意)</label>  <textarea id="access" name="access"></textarea>  …  <p id="seats-gone" tabindex="-1" hidden></p>  <button>$48.00を支払う</button></form>
修正の手順4ステップ
  1. 確保の処理とその有効期限、カウントダウンを削除します。座席を選んでもフォームの seats 欄が埋まるだけになり、ページにもサーバーにも、時間切れになるものはなくなります。
  2. 空きの確認と確保を、支払いを受けるのと同じリクエストで行います。意味を持つのは、「支払う」を押した瞬間だけになります。
  3. フォームは fetch() で送り、ページにとどまります。座席がなくなっていても、支払いは受けず、どの欄にも入力した内容が残ります。
  4. 起きたことと、近くの空いている座席を「支払う」ボタンのそばに書き、フォーカスをそこへ移します。メッセージは読み上げられて目にも入り、利用者はもう一度「支払う」を押すだけで済みます。

これで修正前の例は直り、2.2.3を満たします。購入手続きのどの手順も、時間に左右されません。入力している間に座席がほかの人に売れることはありますが、そのときはメッセージで知らせるだけで、入力した内容は失われません。

04

修正の確認

5項目、マウス不要

確認方法: キーボード、スクリーンリーダー、拡大表示

5件中0件を確認済み

OS、ブラウザーと支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。予約のコードや購入手続きを変更した際は、再度確認します。

制限

ここで扱うのは、座席や在庫をタイマー付きで確保する購入手続きで、ネットショップや予約サイトでよく見る2.2.3の失敗です。もう一つの形は、制限時間のあるクイズやテストです。W3Cはその場合について、制限時間をなくし、時間を計らずに解いたときの成績をもとに採点の基準を決める方法を示しています。利用者をログアウトさせるセッションと、それを延長できる警告は2.2.1の範囲です。警告も延長もないセッションタイムアウトを参照してください。参加者が同時に入札するオークションのような生のイベントと、再生するだけの映像や音声は、2.2.3の対象外です。チケットを確保なしで販売できるかどうかは、どれだけ早く売れるかを知る運営側が判断することです。

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

EaseWebのサービス

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

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

サービス内容を見る