RemoveEventListener对命名函数不起作用

时间:2015-08-13 17:25:13

标签: javascript javascript-events event-handling

我在扭动自己的思绪,并指责为什么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我只需要一次。我忘记了什么?

1 个答案:

答案 0 :(得分:1)

loadImg不是侦听器函数的名称。您已附加了从loadImg()返回的匿名函数。

要解决此问题,您可以为实际的事件处理函数命名:

return function handler (e){
            :
    this.removeEventListener('mouseover', handler, false);
            :
}

A working demo at jsFiddle

事件处理程序中的

this自动引用附加事件的元素。