質問: "Backspace") { // Backspaceを押すとキー入力が効かなくなる window.removeEventListener("keydown", onKeyDown.bind(event), false); } else { // それ以外はキー名が出力される document.getElementById("hogehoge").innerHTML += event.key; } } ``` 実行してみると、Backspaceを押しても、キー入力に反応があるのでリスナーが取り除けていませんでした。JavaScriptのbindとthisの理解が怪しいので、その当たりではないかと考えているのですが、バグの原因を理解できませんでした。keydownリスナーの取り除き方を教えていただけると幸いです。
回答: `removeEventListener`は、`addEventListener`したのと**同じ関数オブジェクト**を渡す必要があります。`bind`を行うと、行った度に(動作は同じでも)別の関数オブジェクトを生成しますので、正しくremoveできません。 ...というより、イベントハンドラ内で`this`を使っていないので、`this`を固定するための操作である`bind`は無意味です。削りましょう。 ``` window.onload = () => { window.addEventListener("keydown", onKeyDown, false); } function onKeyDown(event) { if (event.key === "Enter") { // Enterを押すと改行する document.getElementById("hogehoge").innerHTML += ""; } else if (event.key === "Backspace") { // Backspaceを押すとキー入力が効かなくなる window.removeEventListener("keydown", onKeyDown, false); } else { // それ以外はキー名が出力される document.getElementById("hogehoge").innerHTML += event.key; } } ```