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

IMEの変換確定のEnterで送信される入力欄

ショップの検索欄が、どのEnterのkeydownでも検索するため、日本語の変換を確定するEnterで、入力途中の語が検索されてしまいます。

WCAG 2.2
SC 2.1.1ASC 3.2.2A
必須とする規格
Section 508 · EN 301 549(EU) · JIS X 8341-3
問題あり if (event.key === 'Enter') search(input.value);
アクセシビリティの問題を示した図: 認知:まだ入力中なのに、なぜ検索されたの?
01

問題

日本語や中国語をIMEで入力する人の、検索や送信が、入力の途中で実行されてしまいます。

02

試してみる

ウィンドウの上の日本語入力で、変換が必要な語を入力してから、欄でEnterを押して検索してください。

「傘」を確定するEnterは、IMEに向けたものです。ページがそのEnterで検索するか、ページに何が届いたかを見てください。日本語入力を使える場合は、欄に実際に入力しても試せます。

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

問題KeydownのEnterで検索する
日本語入力(再現):

Linden Home

梅雨に備えて

毎日使える傘、長靴、カバー。

ページに届いたEnter: まだなし

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

03

修正方法

Enterをフォームに任せるか、変換を確定するEnterを除外します。

  1. 1欄はフォームで送信するか、isComposing がtrueか keyCode が229の間はEnterを無視する。
  2. 2Enterの処理はkeydownで行い、keyupでは行わない。
  3. 3実際のIMEで、ChromeだけでなくSafariでも確認する。
修正前 KeydownのEnterで検索する
<div role="search">  <label for="q">検索</label>  <input id="q" type="search"></div> <script>  const input = document.getElementById('q');  input.addEventListener('keydown', (event) => {    if (event.key === 'Enter') search(input.value);  });  function search(query) {    location.assign(`/search?q=${encodeURIComponent(query)}`);  }</script>
修正後

フォームにして、ブラウザーに任せる

<form role="search" action="/search">  <label for="q">検索</label>  <input id="q" name="q" type="search"></form>

この方法を選ぶ理由:まずHTMLの要素を使う

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

04

修正の確認

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

確認方法: キーボード、日本語入力(IME)、スクリーンリーダー

5件中0件を確認済み

OS、ブラウザー、IME、支援技術のバージョン、ビルド、実施日、各手順の実際の結果を記録してください。検索、チャット、フォームのコンポーネントを変更した際は、再度確認します。

制限

このサンプルは、どのアプリケーションでも同じ結果になることを保証するものではありません。例は日本語で入力する1つの検索欄です。中国語のIMEは確定の仕方が異なります。韓国語のIMEは、音節を確定するEnterを通常のEnterとしても渡すことが多く、SafariがそのEnterをkeyCode 229で送るか13で送るかは報告が分かれています。2つ目の修正が、意図したEnterまで無視するおそれがあるため、利用者が韓国語を使う場合はSafariで確認してください。スマートフォンのキーボードは独自の順序でイベントを送るため、利用者が使うIMEで確認してください。リッチテキストエディターは変換を独自に扱うため、別に確認が必要です。検索の処理自体は省略しています。

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

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

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

再テストの進め方