dom_dom0500_007

removeEventListener でリスナーを外すには、登録時と同じ ( A ) と ( B ) を渡す必要がある。無名関数を使うと同一性が保てず解除できない。

解答

A: 関数参照(同一のlistener)
B: オプション(capture 等が同一)

解説

addEventListener(type, listener, options) と removeEventListener(type, listener, options) の listener と options.capture などは同一でなければならない。別インスタンスの関数では一致しない。

使用例(サンプルコード)

[ html ]

<button id="b">切替</button>
<script>
function onClick(){ console.log("click"); }
b.addEventListener("click", onClick, { capture:false });
setTimeout(() => {
  b.removeEventListener("click", onClick, { capture:false });
}, 2000);
</script>