javascript - addeventlistener() 导致内存泄漏

标签 javascript

我有一个模态框,单击按钮即可打开,当模态框可见时,如果单击内容框外部的区域,则模态框应该消失。

我遇到的问题是我的模式不断创建模式并且没有被完全删除,从而造成内存泄漏。

show-login-modal 处理模式的可见性。

let x = 1;

function LoginPopup(){

    let modal = document.getElementById('modal');

    modal.classList.add('show-login-modal');

    let xx = x++;

    function _removeModal() {
        modal.classList.remove('show-login-modal');
        modal.removeEventListener("click", this);
    }

    modal.addEventListener('click', function(event) {
        console.log(xx);
        if (event.target === modal) {
            _removeModal();
         } 
     });
}

我包含了 console.log 以供引用。

解决这个问题的最佳方法是什么?

最佳答案

removeEventListener 使用不正确,需要使用命名函数调用。因此,在您的情况下,您希望将事件目标检测移至 _removeModal

function _removeModal(event){ if (event.target === this){ ... modal.removeEventListener('click', _removeModal)} }

modal.addEventListener('click', _removeModal)

关于javascript - addeventlistener() 导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51486840/

相关文章:

javascript - 如何 .append 带有值的复选框?

javascript - 如何在 AmCharts 中将漏斗图旋转 90 度?

javascript - 使用键作为标题和值将对象集合转换为 CSV

javascript - 使用通用参数的 AJAX 调用始终提供 readState = 1

javascript - ui-gmaps-window 内的 ng-repeat 不渲染来自 $http 调用的数据

javascript - 如何使用 JavaScript 或 jQuery 从另一台服务器解析 XML?

javascript - 从 XML 获取 bool 变量(不是字符串)

javascript - D3 V4 刻度线 x1 值

javascript - 使用 ajax 将数据从 javascript 发送到 PHP

javascript - 根据窗口大小加载jquery