2016-06-27 4 views
0

Мне нужен способ удалить EventListeners объекта в виде очереди, где первый добавленный EventListener является первым в списке или первым, который нужно удалить.
Кроме того, если я не знаю, что делает 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>

У меня было бы 3 EventListners на mybtn. Теперь, как я могу удалить EventListener, который был сначала добавлен, или получить список EventListeners и удалить его из списка?


Есть ли способ сделать это?

ответ

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); 

(NB:. Для более элегантный подход к вышесказанному, можно создать массив, а затем цикл над ним, чтобы добавить слушателей)

+0

Спасибо, это действительно помогло :) – MysteryBlokHed