【发布时间】:2019-09-15 03:29:56
【问题描述】:
我有以下代码来设置我的事件监听器(是的,我知道我应该使用委托)。函数处理程序通常是匿名的,但我后来命名了它以便我可以删除它,但问题就从这里开始了。代码如下:
for (var i=0;i<karten.length;i++) {
setupeventlistener(karten[i]);
}
function setupeventlistener (obj){
obj.addEventListener("click",function handler(e){output(obj,e);});
}
现在,如果我想删除输出函数中的监听器(使用removeeventlistener("click",handler),我无法访问处理函数,因为它在setupeventlistener 范围内(这就是我猜的?),但如果我将它移动到全局范围并通过 var 定义它,它无法访问传递给输出的参数 obj(来自setuplistener)。
简而言之,我想删除监听器并保持我的所有功能原样,因为我的小任务除了无法删除监听器来完成项目之外还有效。
【问题讨论】:
-
您应该能够将函数 handler() 移动到更高的范围。你能用
access the handler arguments of output (obj)说明你的意思吗? -
如果您无权访问原始绑定函数,则无法删除事件侦听器。
-
@shilly,是的,我可以将它移动到全局范围,但我不知道如何将传递给 setupeventlistener 的参数 (obj) 传递给我的处理程序。 (当我把他放到全球范围内时)。问题是函数处理程序不能被任何其他函数访问,除非我把它放到全局范围内,我对吗?
-
obj,将是单击的按钮/元素吗?如果是这样:
e.target也会给你点击的元素,你实际上不必将 obj 传递给处理程序。 -
好吧,这很容易哈哈,谢谢 :D,不知道为什么我认为我必须将 obj 放在顶部,因为无论如何我在大多数东西上都使用 e.target。
标签: javascript function dom-events