这是我现在正在努力的功能:
function close(ubicacion){
return function(){
if ((event.target.className == 'contCurso') || (event.target.className == 'cerrar') || (window.event.keyCode == 27) ){
closeWindow('contCurso', ubicacion); //se cierra el curso
document.removeEventListener('click',close);
document.removeEventListener('keydown',close);
}
else{
console.log('Listener not removed'); } }}
close被称为来自另一个函数的处理程序,如下所示:
document.addEventListener('click', close(contCurso));
document.addEventListener('keydown', close(contCurso));
不仅没有删除我想要的侦听器,而且它还删除了我在主要部分添加的一些不应删除的内容。
任何帮助都会非常感激。非常感谢!
答案 0 :(得分:2)
当你致电document.addEventListener('click', close(contCurso));
时,你正在评估函数close
,它返回另一个作为监听器回调附加的函数。但是,当您尝试删除它时,您只是向它传递一个对函数close
的引用,该函数不附加的函数,因此不会删除任何内容。
如果要以这种方式附加事件监听器,则必须保存对所附原始函数的引用,以便以后能够将其删除:
let listener = close(contCurso);
document.addEventListener('click', listener);
...
document.removeEventListener('click', listener);
即使拨打removeEventListener('click', close(contCurso))
也不够,因为它没有返回对同一功能的引用。