Я скручиваю свой ум и пальцы, обнаружив, почему removeEventListener
не будет работать. Это должно быть одноразовое событие, поэтому я включил removeEventListener
в функцию обратного вызова. Но событие срабатывает каждый раз.RemoveEventListener не работает с именованной функцией
var group = ...//some div's ID
var img_button = document.createElement("SPAN");
img_button.setAttribute("id","imgbutton_"+group);
if (figures.addEventListener){
figures.addEventListener(
'click', function(e){if (!e) e = window.event;e.stopPropagation();}, false);
img_button.addEventListener(
'mouseover', loadImg(group), false);
}else{...};
И с обратным вызовом loadImg
:
function loadImg(nodeId){//loading images when needed
return function(e){
if (!e) e = window.event;
[...]
//remove eventlistener when executed once
var sp = (e.target ? e.target : e.srcElement);
if (sp.removeEventListener){
sp.removeEventListener(
'mouseover', loadImg);
} else {...};
};
Анонимная функция может остаться, но loadImg
мне нужно только один раз. Что я забыл?
'loadImg' - это не имя функции слушателя. Вы добавили функцию, которая возвращается из 'loadImg()', и эта функция не имеет имени (вы можете добавить ее, хотя). – Teemu