【发布时间】:2019-04-21 21:32:09
【问题描述】:
提前道歉,因为我进行了一些搜索,这似乎是一个相当普遍的问题,但我找到的答案都没有完全满足我的需求。我能找到的最接近的是How do I add and remove an event listener using a function with parameters?,但那里的答案涉及 JQuery,我正试图找到一种仅在 JS 中执行此操作的方法。
我正在使用匿名函数通过事件触发器传递参数,我认为这是正确的方法。如果 temp 是由一些基于添加事件时的状态的计算定义的,我想添加监听器如下:
item.addEventListener("click", function(){myOnClickFunction(temp)});
但是,如果满足某些条件,我希望能够动态删除事件。
item.removeEventListener("click", function(){myOnClickFunction(temp)});
这不起作用,因为内联函数是匿名的,并且不能被引用以匹配事件侦听器(加上 temp 可能无论如何都不同)。由于 temp 是在触发时计算的,因此我无法在匿名函数之外存储引用,如下所示:
var listener = function() {
var temp = calculate(arg1, arg2, event);
myFunction(temp);
};
window.addEventListener('click', listener, false);
这样我以后可以打电话:
window.removeEventListener('click', listener, false);
myOnClickEvent(temp){
//My code and calculations here
document.removeEventListener("keypress", arguments.callee);
}
也不起作用,尽管我对该方法应该如何工作不太自信。
如何动态删除此功能?在某些情况下,我也许可以重构我的代码,以便所有需要传递的变量都全局存储并不断重写,但这听起来像是乱码。另外,在某些情况下,触发事件是需要传递的参数之一,所以我认为我无法做到这一点。有什么想法吗?
【问题讨论】:
标签: javascript