## 事象 以下のようなイベントをinputエレメントに設定する。 ```typescript const listener = (ev: KeyboardEvent) => { if (ev.code === "Enter") { // 処理 } }; this.inputEl.addEventListener("keydown", listener); ``` これで`Enter`を押したときに処理が実行されるようになった... が[[IME]]が有効なときにも処理が実行されてしまう。これでは日本語入力の確定などができず実用に耐えかねない。 ## 原因 イベントは[[IME]]の状態によらず発火するため。 ## 解決方法 [[isComposingプロパティ]]を使う。 ```typescript const listener = (ev: KeyboardEvent) => { if (ev.isComposing) { // 変換中の場合は処理を中断 return; } if (ev.code === "Enter") { // 処理 } }; this.inputEl.addEventListener("keydown", listener); ``` ## 参考 - [KeyboardEvent: isComposing プロパティ \- Web API \| MDN](https://developer.mozilla.org/ja/docs/Web/API/KeyboardEvent/isComposing)