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;iMouseMove
。然后双击另一个项目时,它会尝试删除与其MouseMove
副本相关的事件侦听器,但该副本可能不是最初使用的副本
最好的补救办法是从双击事件处理程序中删除MouseMove
的定义,因此它是一个函数,而不是多个具有相同名称但不是相同函数的函数。如中所述,事件侦听器只能通过引用创建时引用的原始函数来删除。在代码中,在文档上创建了多个事件侦听器,每个侦听器都有自己的函数MouseMove
。然后双击另一个项目时,它会尝试删除与其MouseMove
副本相关的事件侦听器,但该副本可能不是最初使用的副本
最好的补救办法是从双击事件处理程序中去掉
MouseMove
的定义,这样它就变成了一个函数,而不是多个同名但功能不同的函数。clickedsomanytime是所有菜单的常见功能。您必须维护一个变量,该变量保存每个menuPlease的状态,并向我们显示一些标记。还有,你所说的“所有MN都是菜单”是什么意思?您在哪里定义AllMns
?每次启动dblclick
侦听器时,您都在重新创建MouseMove
。它与您传递给addEventListener
的原始函数不匹配,因此不会删除它,因为您没有传递原始函数次要点,因为它不会影响此特定问题,但看起来好像您正在尝试传递i作为事件处理程序的索引,它实际上是事件对象。ClickedSoManyTimes是所有菜单的共同点。您必须维护一个变量,该变量保存每个menuPlease的状态,并向我们显示一些标记。还有,你所说的“所有MN都是菜单”是什么意思?您在哪里定义AllMns
?每次启动dblclick
侦听器时,您都在重新创建MouseMove
。它与传递给addEventListener
的原始函数不匹配,因此不会删除它,因为您没有传递原始函数次要点,因为它不会影响此特定问题,但看起来好像您试图将i作为索引传递给事件处理程序,它实际上是事件对象。