我在这里到处搜索以找到答案来满足这个问题,但找不到。我确实找到了这个answer for action script和其他类似的东西,但是没有一个人直接回答了我关于Javascript的问题。
我有一个事件侦听器,它需要像这样传递一个参数:
var parameter = "";
myVar.addEventListener('event', function(e){
function_To_Call(e,parameter);
}, false);
完成后如何删除此事件侦听器?
答案 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
。