.removeEventListener()
EventTarget.addEventListenerを使用して登録されたイベントリスナーを削除します。 EventTarget.addEventListenerを使用して登録されたイベントリスナーを削除します。
文法
target.removeEventListener(type, listener[, useCapture])
引数 | 説明 |
---|---|
type |
型: 削除するイベントの型を表す文字列を指定します。 |
listener |
型: 削除するEventListener関数を指定します。 |
[useCapture] |
型:
削除されるEventListenerがキャプチャリスナーとして登録されていたか否かを指定します。
指定されない場合、デフォルトの もしリスナーが、1つはキャプチャとして、もう1つはそうでは無いものとして2度登録された場合、 それぞれ別々に削除しなければいけません。 キャプチャリスナーの除去は、同じリスナーのキャプチャを使用しない方に作用することは無く、 逆もまた然りです。 |
注意: useCapture
は例えばFirefox6以降のような、
主要なブラウザの比較的新しいバージョンで任意指定の引数になりました。
幅広くバージョンの互換性をサポートする必要があるのであれば、この引数を指定する必要があります。
サンプル
もし、イベント処理中にEventTargetから、
EventListenerが削除されると、
その実行中のアクションでトリガされません。
削除後は、EventListener
は実行されなくなります。
EventTarget
に登録されているEventListenerを識別出来ない引数が指定された場合、
removeEventListener()
は何もしません。
注意事項
下記はイベントリスナーを追加し、その後削除する例になります。
var div = document.getElementById('div');
var listener = function (event) {
/* ここで何かします */
};
div.addEventListener('click', listener, false);
div.removeEventListener('click', listener, false);
ブラウザの互換性
機能 | Chrome | Firefox (Gecko) |
IE | Opera | Safari |
---|---|---|---|---|---|
基本 | 1.0 | 1.0 (1.7 or earlier) | 9.0 | 7 | 1.0 |
useCapture指定が 任意 |
◯ | 6.0 | 9.0 | (12.00) | ◯ |
機能 | Android | Firefox Mobile |
IE Mobile |
Opera Mobile |
Safari Mobile |
|
---|---|---|---|---|---|---|
基本 | 1.0 | 1.0 (1) | 9.0 | 6.0 | 1.0 | |
useCapture指定が 任意 |
? | ? | ? | ? | ? |
Geckoでの注意事項
-
Firefox 6より前のバージョンでは、もし
useCapture
引数に明示的にfalse
が指定されていなければ、 例外がスローされます。 Gecko 9.0(Firefox 9.0 / Thunderbird 9.0 / SeaMonkey 2.6)より前のバージョンでは、 addEventListener()はリスナーの引数がnull
だと例外をスローしますが、 現在ではメソッドはエラーをエラーを返さず、何も行いません。
Operaでの注意事項
- Opera 12.00で、useCapture引数は省略可になります。 (情報源)
WebKitでの注意事項
-
Webkitで
useCapture
引数が明示的に省略可になったのは2011年6月ですが、 それ以前から動作していました。 この変更は、Safari5.1とChrome13で実装されました。
関連項目
仕様
古いブラウザのサポート(Polyfill)
addEventListener()
とremoveEventListener()
は古いブラウザでは提供されていません。
あなたのスクリプトの始めに下記の興味深いコードを置くことで、
これらがサポートされないブラウザでaddEventListener()
とremoveEventListener()
を使用可能にします。
if (!Element.prototype.addEventListener) {
var oListeners = {};
function runListeners(oEvent) {
if (!oEvent) { oEvent = window.event; }
for (var iLstId = 0, iElId = 0, oEvtListeners = oListeners[oEvent.type]; iElId < oEvtListeners.aEls.length; iElId++) {
if (oEvtListeners.aEls[iElId] === this) {
for (iLstId; iLstId < oEvtListeners.aEvts[iElId].length; iLstId++) { oEvtListeners.aEvts[iElId][iLstId].call(this, oEvent); }
break;
}
}
}
Element.prototype.addEventListener = function (sEventType, fListener /*, useCapture (will be ignored!) */) {
if (oListeners.hasOwnProperty(sEventType)) {
var oEvtListeners = oListeners[sEventType];
for (var nElIdx = -1, iElId = 0; iElId < oEvtListeners.aEls.length; iElId++) {
if (oEvtListeners.aEls[iElId] === this) { nElIdx = iElId; break; }
}
if (nElIdx === -1) {
oEvtListeners.aEls.push(this);
oEvtListeners.aEvts.push([fListener]);
this["on" + sEventType] = runListeners;
} else {
var aElListeners = oEvtListeners.aEvts[nElIdx];
if (this["on" + sEventType] !== runListeners) {
aElListeners.splice(0);
this["on" + sEventType] = runListeners;
}
for (var iLstId = 0; iLstId < aElListeners.length; iLstId++) {
if (aElListeners[iLstId] === fListener) { return; }
}
aElListeners.push(fListener);
}
} else {
oListeners[sEventType] = { aEls: [this], aEvts: [ [fListener] ] };
this["on" + sEventType] = runListeners;
}
};
Element.prototype.removeEventListener = function (sEventType, fListener /*, useCapture (will be ignored!) */) {
if (!oListeners.hasOwnProperty(sEventType)) { return; }
var oEvtListeners = oListeners[sEventType];
for (var nElIdx = -1, iElId = 0; iElId < oEvtListeners.aEls.length; iElId++) {
if (oEvtListeners.aEls[iElId] === this) { nElIdx = iElId; break; }
}
if (nElIdx === -1) { return; }
for (var iLstId = 0, aElListeners = oEvtListeners.aEvts[nElIdx]; iLstId < aElListeners.length; iLstId++) {
if (aElListeners[iLstId] === fListener) { aElListeners.splice(iLstId, 1); }
}
};
}
© 2017 Mozilla Contributors
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
このページは、ページトップのURL先のMozilla Developer Network(以下、MDN)のコンテンツを翻訳した内容を基に構成されています。 構成について異なる点も含まれますので、下記の項目を確認し、必要に応じて元のコンテンツをご確認ください。 もし、誤訳などの間違いを見つけましたら、 @tomofまで教えていただければ幸いです。
- 特定のブラウザに特化しすぎている情報やあまりにも古い情報、 または試験的に導入されているようなAPIや機能については、省略していることがあります。
- 例やデモについて、実際にページ内で動作させる関係で一部ソースコードを変更している場合や、 その例で使用しているコンテンツの単語や文章などを日本人向けに変更しいてる場合があります。
- MDNの更新頻度が高いため、元のコンテンツと比べ情報が古くなっている可能性があります。
- "訳注:"などの断わりを入れた上で、日本人向けの情報の追記を行っている事があります。