言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

JavaScript辞典

  1. トップページ
  2. JavaScript辞典
  3. HTML要素.removeEventListener()

HTML要素.removeEventListener()

対応: DOM Level 2(2000)

HTML要素.addEventListener()』で登録したイベントリスナーを解除するメソッドです。登録時と同じイベント名・関数の参照を指定する必要があります。

構文

element.removeEventListener("イベント名", 関数);

引数

引数概要
イベント名解除するイベントの名前を文字列で指定します。『click』『input』『scroll』などがあります。
関数HTML要素.addEventListener()』で登録した時と同じ関数の参照を指定します。

サンプルコード

<button id="action-btn">クリック</button>
<button id="remove-btn">解除</button>
<p id="output"></p>
<input id="search" type="text" placeholder="検索">
<p id="search-output"></p>

同じ処理は次のようにも書けます。

// パターン1: removeEventListener() の基本(名前付き関数で登録・解除)
var actionBtn = document.getElementById("action-btn");
var removeBtn = document.getElementById("remove-btn");
var output = document.getElementById("output");
var count = 0;

function handleClick() {
	count++;
	output.textContent = count + "回クリックされました";
}

actionBtn.addEventListener("click", handleClick);

removeBtn.addEventListener("click", function() {
	actionBtn.removeEventListener("click", handleClick); // 同じ関数参照で解除します。
	output.textContent = "リスナーを解除しました。これ以上クリックは反応しません。";
});

// パターン2: 無名関数では解除できない(注意事項)
actionBtn.addEventListener("click", function() {
	console.log("この無名関数は解除できません");
});
// 以下は解除されません。見た目が同じでも別オブジェクトのためです。
// curseBtn.removeEventListener("click", function() { ... }); // 無効
// actionBtn.removeEventListener("click", function() { ... }); // 無効

// パターン3: 一定回数後に自動的にリスナーを解除する
var searchInput = document.getElementById("search");
var searchOutput = document.getElementById("search-output");
var searchCount = 0;

function handleSearch(e) {
	searchCount++;
	searchOutput.textContent = "検索: " + e.target.value + "(" + searchCount + "回目)";
	if (searchCount >= 3) {
		searchInput.removeEventListener("input", handleSearch);
		searchOutput.textContent += " ← 3回の検索後にリスナーを自動解除しました";
	}
}

searchInput.addEventListener("input", handleSearch);

サンプルページはこちら

無名関数では解除できない

『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から削除される際に登録済みのリスナーが残っていると、メモリが解放されない場合があります。

対応ブラウザ

Chrome Chrome
49 以降
Firefox Firefox
57 以降
Safari Safari
18 以降
Edge Edge
80 以降
11 以前 ×
IE IE
11 以降
5 以前 ×
Opera Opera
48 以降
6 以前 ×
iOS Safari iOS Safari
18 以降
Android Browser Android Browser
37 以降
4 以前 ×
Chrome Android Chrome Android
36 以降
17 以前 ×
Firefox Android Firefox Android
79 以降
3 以前 ×

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。