我需要一种方法来删除对象的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的列表并从列表中删除一个?
有没有办法做到这一点?
答案 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 );
(注意:为了更加优雅地解决上述问题,您可以创建数组,然后在其上循环以添加侦听器。)