やりたいこと
日本語入力のハンドリングをJavaScriptでどう扱うかという話です。 可能なら、変換中は処理せず、変換が完了した時点で処理したい。
前提条件
- Chrome 68
- Firefox 61.0.2
- Safari 11.1.2
概要
以下の2つが使えそうな候補です。
JSFiddleで検証用の簡単なコードを書いています。
実際の結果は以下のようになりました。
- Chrome
- IMEオフで入力: inputイベントが発生。isComposingはfalse
- IMEオン、入力中: inputイベントが発生。isComposingはtrue
- IMEオン、入力完了: compositionendイベントが発生
- ペースト: inputイベントが発生、isComposingはfalse
- Firefox
- IMEオフで入力: inputイベントが発生。isComposingはfalse
- IMEオン、入力中: inputイベントが発生。isComposingはtrue
- IMEオン、入力完了:
- compositionendイベントが発生
- inputイベントが発生、isComposingはfalse
- ペースト: inputイベントが発生、isComposingはfalse
- Safari
- isComposingは未対応(undefined)
- IMEオフ: 入力時にinputイベントが発生。
- IMEオン、入力中: inputイベントが発生。
- IMEオン、入力完了:
- inputイベントが2回発生
- compositionendイベントが発生
この時点でちょっとやる気なくしました(´・ω・`)
補足
外部サイト
- 今後 IME 変換中にも keydown、keyup イベントが発生するようになります | Firefox サイト互換性情報
- JavaScript とクロスブラウザでの IME event handling (2017年) - たにしきんぐダム
マニュアル
- JavaScript
- i18n: まだありません。