removeEventListener 不起作用,并且没有返回错误

removeEventListener doesn't work, and no error's are returned

正如您在下面的代码中看到的,我正在尝试删除鼠标移动事件侦听器,但是该侦听器没有被删除,也没有返回任何错误,正如您第一次双击添加听众的菜单,这很好用。第二次双击它应该被删除.. 但事实并非如此。我以错误的方式删除它?有人可以帮我解决这个问题我真的很感激..

function DragMenus()
{
    ClickedSoManyTimes = 0;
    Menu = document.getElementsByClassName("Box1");
    AllMns = [Menu[1], Menu[2], Menu[3], Menu[4]];

    var i;
    for (i = 0; i < AllMns.length; i++)
    {
        AllMns[i].addEventListener("dblclick", function(i)
        {
            function MouseMove()
            {
                 // Do Something
            };

            ClickedSoManyTimes = ClickedSoManyTimes + 1;
    
            if(Number.isInteger(ClickedSoManyTimes/2))                 
            {
               console.log("Stop");
               // delete Listener
               document.removeEventListener("mousemove", MouseMove); // Fails
            }
            else
            {
                console.log("Start");
                document.addEventListener("mousemove", MouseMove);
            };
        });
    };
};

this answer 中所述,事件侦听器只能通过使用对您在创建它时引用的 原始 函数的引用来删除。在您的代码中,在文档上创建了多个事件侦听器,每个侦听器都有自己的函数 MouseMove。然后,当您双击另一个项目时,它会尝试删除与 它的 副本 MouseMove 相关的事件侦听器,但这可能不是最初的副本使用过。

最好的补救措施是从双击事件处理程序中删除 MouseMove 的定义,因此它是 one 函数而不是许多具有相同功能的函数名称但不是相同的功能。