HTML要素.removeEventListener() 対応: DOM Level 2(2000)
『HTML要素.addEventListener()』で登録したイベントリスナーを解除するメソッドです。登録時と同じイベント名・関数の参照を指定する必要があります。
構文
element.removeEventListener("イベント名", 関数);
引数
| 引数 | 概要 |
|---|---|
| イベント名 | 解除するイベントの名前を文字列で指定します。『click』『input』『scroll』などがあります。 |
| 関数 | 『HTML要素.addEventListener()』で登録した時と同じ関数の参照を指定します。 |
サンプルコード
<button id="btn">クリック</button> <button id="removeBtn">リスナー解除</button> <p id="output"></p>
var btn = document.querySelector("#btn");
var removeBtn = document.querySelector("#removeBtn");
var output = document.querySelector("#output");
var count = 0;
// 解除するためには名前付き関数を使用します。
function handleClick() {
count++;
output.textContent = count + "回クリックされました";
}
// イベントリスナーを登録します。
btn.addEventListener("click", handleClick);
// 「リスナー解除」ボタンでイベントリスナーを解除します。
removeBtn.addEventListener("click", function() {
btn.removeEventListener("click", handleClick);
output.textContent = "リスナーが解除されました";
});
無名関数では解除できない
『HTML要素.addEventListener()』で無名関数を使って登録したリスナーは、『HTML要素.removeEventListener()』で解除できません。見た目が同じコードでも、無名関数は毎回別のオブジェクトとして生成されるため、同じ関数の参照とは見なされないためです。
// この書き方では解除できません。
btn.addEventListener("click", function() {
console.log("クリック");
});
// 同じ内容の関数を指定しても別のオブジェクトのため一致しません。
btn.removeEventListener("click", function() {
console.log("クリック");
}); // 解除されません。
概要
『HTML要素.removeEventListener()』は登録済みのイベントリスナーを解除するメソッドです。登録時に使用した関数と同じ参照を渡す必要があるため、解除が必要なリスナーは必ず名前付き関数で登録してください。
リスナーを1回だけ実行したい場合は、『HTML要素.removeEventListener()』を使わずに『HTML要素.addEventListener()』の第3引数に『{ once: true }』を指定する方法が簡潔です。
メモリリークを防ぐためにも、不要になったリスナーは適切に解除することが大切です。特にHTML要素がDOMから削除される際に登録済みのリスナーが残っていると、メモリが解放されない場合があります。
対応ブラウザ
5 以前 ×
6 以前 ×
Android Browser
37 以降 ○
4 以前 ×
Chrome Android
36 以降 ○
17 以前 ×
Firefox Android
79 以降 ○
3 以前 ×記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。