前提・実現したいこと
JavaScriptのaddEventListenerが複数回追加されるのを防ぎたい。
クリックイベントの削除を行いたい。
発生している問題・エラーメッセージ
ポップアップ自体は、きちんと実装することができたのですが、クリックしたときにポップアップを表示・非表示させる仕組みを書いてる関数が2回目以降に呼びだされた時、addEventListenerが複数回追加されてしまいます。
そのため、関数が2回以上呼ばれた時は、クリックが一度に2回以上押されて、ポップアップが表示されなかったり、ポップアップが消えなかったりします。
該当のソースコード
JavaScript
1function popupExample() { 2 // ポップアップのHTML要素を取得、なければ終了 3 var popup = document.getElementById('js-popup'); 4 if(!popup) return; 5 // ポップアップのそれぞれの要素を取得 6 var blackBg = document.getElementById('js-black-bg'); 7 var closeBtn = document.getElementById('js-close-btn'); 8 var showBtn = document.getElementById('js-show-btn'); 9 10 closePopup(blackBg); 11 closePopup(closeBtn); 12 closePopup(showBtn); 13 14 function closePopup(elem) { 15 if(!elem) return; 16 elem.removeEventListener("click", addToggle); 17 elem.addEventListener("click", addToggle); 18 } 19 20 function addToggle() { 21 popup.classList.toggle('is-show'); 22 } 23} 24
こちらの関数を複数回呼び出しており、調査すると1回目、3回目、5回目のような奇数回の時は、正しく動いております。
それぞれ奇数回の呼び出し時には、クリックを何回してもきちんと動きます。
試したこと
まずは、この関数自体が正しく動いて、ポップアップが表示されることは確認済みです。
ただし、コンソールログを用いてのデバック実行で、関数が2回目以降呼び出された時は、一度のクリックで複数回(呼び出された回数分だけ)クリックされることが判明。
そのため、クリックイベントを消せないかと、removeEventListenerを追加して、テストしたが結果変わらず。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー