## 事象
以下のようなイベントを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)