将参数传递给可以删除的事件监听器

时间:2018-08-10 03:06:49

标签: javascript parameters

我在这里到处搜索以找到答案来满足这个问题,但找不到。我确实找到了这个answer for action script和其他类似的东西,但是没有一个人直接回答了我关于Javascript的问题。

我有一个事件侦听器,它需要像这样传递一个参数:

var parameter = "";
myVar.addEventListener('event', function(e){
    function_To_Call(e,parameter);
}, false);

完成后如何删除此事件侦听器?

3 个答案:

答案 0 :(得分:2)

这里是另一种解决方案,不需要将var保留在保存您的自定义值的函数范围之外。通过使用闭包。您仍将具有外部函数句柄,但对我来说它看起来更干净,并且更不容易出错。

const handlerFabric = (someArg) => {
    return (e) => { 
        //Here you have access to your someArg, as well as the e coming in
        console.log(e); 
        console.log(someArg);
    }
}

const handler = handlerFabric('test'); //Set your custom arg here

myVar.addEventListener('event', handler);
myVar.EventListener('event', handler);

答案 1 :(得分:1)

不要使用匿名函数作为侦听器。做类似的事情:

var parameter = "";
var listenerFunction = function(event, parameter) {
    // code for function_To_Call goes here
}

myVar.addEventListener(event, listenerFunction);

完成后:

myVar.removeEventListener(event, listenerFunction);

请参见https://www.w3schools.com/jsref/met_element_removeeventlistener.asp

答案 2 :(得分:0)

您需要对传递给SELECT * FROM entries e WHERE e.categoryID=1 AND e.editDate is NULL AND e.createdDate in(SELECT min(createdDate) FROM entries) 的函数有独立的引用。例如:

addEventListener

由于var parameter = ""; const callback = function(e){ function_To_Call(e,parameter); } myVar.addEventListener('event', callback); // ... myVar.removeEventListener('event', callback); 函数仍然是静态的,因此parameter的同时更改没有影响。

请注意,为减少不必要的代码,请随时忽略第三个参数callback addEventListener,该参数已默认为useCapture