Javascript removeEventListener不';t工作,没有错误';被退回的

Javascript removeEventListener不';t工作,没有错误';被退回的,javascript,event-listener,removeeventlistener,Javascript,Event Listener,Removeeventlistener,正如您在下面的代码中所看到的,我正在尝试删除一个鼠标移动事件侦听器,但是这个侦听器没有被删除,并且没有返回任何错误,正如您第一次双击添加了侦听器的菜单时所看到的,这样做很好。第二次双击时,应将其删除。。 但事实并非如此。我把它移错地方了?有人能帮我解决这个问题吗我非常感激 function DragMenus() { ClickedSoManyTimes = 0; Menu = document.getElementsByClassName("Box1");

正如您在下面的代码中所看到的,我正在尝试删除一个鼠标移动事件侦听器,但是这个侦听器没有被删除,并且没有返回任何错误,正如您第一次双击添加了侦听器的菜单时所看到的,这样做很好。第二次双击时,应将其删除。。 但事实并非如此。我把它移错地方了?有人能帮我解决这个问题吗我非常感激

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);
            };
        });
    };
};
函数DragMenus() { 单击somanytimes=0; Menu=document.getElementsByClassName(“Box1”); AllMns=[菜单[1],菜单[2],菜单[3],菜单[4]; var i; 对于(i=0;i如中所述,只能通过引用创建事件侦听器时引用的原始函数来删除事件侦听器。在代码中,在文档上创建了多个事件侦听器,每个侦听器都有自己的函数
MouseMove
。然后双击另一个项目时,它会尝试删除与其
MouseMove
副本相关的事件侦听器,但该副本可能不是最初使用的副本

最好的补救办法是从双击事件处理程序中删除
MouseMove
的定义,因此它是一个函数,而不是多个具有相同名称但不是相同函数的函数。

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


最好的补救办法是从双击事件处理程序中去掉
MouseMove
的定义,这样它就变成了一个函数,而不是多个同名但功能不同的函数。

clickedsomanytime是所有菜单的常见功能。您必须维护一个变量,该变量保存每个menuPlease的状态,并向我们显示一些标记。还有,你所说的“所有MN都是菜单”是什么意思?您在哪里定义
AllMns
?每次启动
dblclick
侦听器时,您都在重新创建
MouseMove
。它与您传递给
addEventListener
的原始函数不匹配,因此不会删除它,因为您没有传递原始函数次要点,因为它不会影响此特定问题,但看起来好像您正在尝试传递i作为事件处理程序的索引,它实际上是事件对象。ClickedSoManyTimes是所有菜单的共同点。您必须维护一个变量,该变量保存每个menuPlease的状态,并向我们显示一些标记。还有,你所说的“所有MN都是菜单”是什么意思?您在哪里定义
AllMns
?每次启动
dblclick
侦听器时,您都在重新创建
MouseMove
。它与传递给
addEventListener
的原始函数不匹配,因此不会删除它,因为您没有传递原始函数次要点,因为它不会影响此特定问题,但看起来好像您试图将i作为索引传递给事件处理程序,它实际上是事件对象。