我在扭动自己的思绪,并指责为什么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
我只需要一次。我忘记了什么?
答案 0 :(得分:1)
loadImg
不是侦听器函数的名称。您已附加了从loadImg()
返回的匿名函数。
要解决此问题,您可以为实际的事件处理函数命名:
return function handler (e){
:
this.removeEventListener('mouseover', handler, false);
:
}
事件处理程序中的 this
自动引用附加事件的元素。