gpt4 book ai didi

javascript - 如何删除带有匿名函数的addEventListener 的EventListener?

转载 作者:IT王子 更新时间:2023-10-29 02:46:12 26 4
gpt4 key购买 nike

function doSomethingWith(param)
{
document.body.addEventListener(
'scroll',
function()
{
document.write(param);
},
false
); // An event that I want to remove later
}
setTimeout(
function()
{
document.body.removeEventListener('scroll', HANDLER ,false);
// What HANDLER should I specify to remove the anonymous handler above?
},
3000
);
doSomethingWith('Test. ');

最佳答案

你不能。您必须使用命名函数或以某种方式存储引用。

var handler;

function doSomethingWith(param) {
handler = function(){
document.write(param);
};
document.body.addEventListener('scroll', handler,false);
}
setTimeout(function() {
document.body.removeEventListener('scroll', handler ,false);
}, 3000);

最好是以结构化的方式执行此操作,以便您可以识别不同的处理程序并将其删除。在上面的示例中,您显然只能删除最后一个处理程序。

更新:

您可以创建自己的处理程序 handler (:)) :

var Handler = (function(){
var i = 1,
listeners = {};

return {
addListener: function(element, event, handler, capture) {
element.addEventListener(event, handler, capture);
listeners[i] = {element: element,
event: event,
handler: handler,
capture: capture};
return i++;
},
removeListener: function(id) {
if(id in listeners) {
var h = listeners[id];
h.element.removeEventListener(h.event, h.handler, h.capture);
delete listeners[id];
}
}
};
}());

然后你可以使用它:

function doSomethingWith(param) {
return Handler.addListener(document.body, 'scroll', function() {
document.write(param);
}, false);
}

var handler = doSomethingWith('Test. ');

setTimeout(function() {
Handler.removeListener(handler);
}, 3000);

DEMO

关于javascript - 如何删除带有匿名函数的addEventListener 的EventListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5660131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com