如何在创建时删除EventListener?

时间:2016-06-27 20:55:46

标签: javascript event-listener

我需要一种方法来删除对象的EventListeners作为队列排序,其中添加的第一个EventListener是列表中的第一个,或者第一个要删除的。
另外,如果我不知道EventListener的作用(但我知道持有EventListener的对象)
就像我有这个设置一样:

var btn = document.getElementById("mybtn");
// Some example listeners, some don't make sense.
btn.addEventListener("click", onClick, false);
btn.addEventListener("keydown", onKeyDown, false);
btn.addEventListener("keyup", onKeyUp, false);

function onClick(){
    alert("You clicked me!");
}

function onKeyDown(){
    console.log("Key down");
}

function onKeyUp(){
    console.log("Key up");
}
<button id="mybtn">Do stuff! I use listeners.</button>

我会在mybtn上有三个EventListners。现在,我如何删除首次添加的EventListener,或者获取EventListener的列表并从列表中删除一个?


有没有办法做到这一点?

1 个答案:

答案 0 :(得分:4)

删除事件侦听器的唯一方法是调用removeEventListener并将要删除的侦听器作为参数传递给它。

要实现您的目标,您必须按照自己添加的顺序维护监听器列表。

由于您正在处理不同类型的侦听器,因此您还需要跟踪类型。

function someListener(e) {}
function someOtherListener(e) {}
function someOtherListener(e) {}

var tracker = [];

btn.addEventListener("click", someListener, false);
tracker.push({ event: "click", listener: someListener });
btn.addEventListener("keydown", someOtherListener, false);
tracker.push({ event: "keydown", listener: someOtherListener });
btn.addEventListener("keyup", someOtherListener, false);
tracker.push({ event: "keyup", listener: someOtherListener });

var remove = tracker.unshift();
btn.removeEventListener( remove.event, remove.listener );

(注意:为了更加优雅地解决上述问题,您可以创建数组,然后在其上循环以添加侦听器。)