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 函数而不是许多具有相同功能的函数名称但不是相同的功能。
正如您在下面的代码中看到的,我正在尝试删除鼠标移动事件侦听器,但是该侦听器没有被删除,也没有返回任何错误,正如您第一次双击添加听众的菜单,这很好用。第二次双击它应该被删除.. 但事实并非如此。我以错误的方式删除它?有人可以帮我解决这个问题我真的很感激..
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 函数而不是许多具有相同功能的函数名称但不是相同的功能。