javascript - 在 JavaScript 中删除事件监听器

标签 javascript listener event-listener

我向一个元素添加一个事件监听器:

/* sitepoint.com/javascript-this-event-handlers */
function AttachEvent(element, type, handler){
    if (element.addEventListener){
        element.addEventListener(type, handler, false);
    }else{
        element.attachEvent("on"+type, handler);
    }
}

window.addEventListener("load", function() {
    var els = getElementsByClassName('name', 'img');
    var elsnum = els.length;
    if(elsnum) //found
    {
        var i = 0;
        for(i=0; i < elsnum; i++)
        {
            var the_els = els[i];
            AttachEvent(the_els, "click", myfunction); 
        }
    }
}, false);

稍后在 myfunction 中,我想再次删除处理程序,以防止重复点击:

function myfunction(e) {
    e = e || window.event;
    var target = e.target || e.srcElement;  

    //more code
    //...

    //remove click handler
    target.removeEventListener('click', e, false);

    //more code
    //...
}

不过,事件监听器并没有被删除。当我点击其中一个元素时,再次执行 myfunction 的代码。如何移除事件监听器以防止被点击的元素再次被点击?

PS:我不使用 jQuery。

最佳答案

我相信您快到了,但是您必须将 listener 传递给 removeEventListener,而不是事件本身。所以尝试:

target.removeEventListener('click', myFunction, false);

关于javascript - 在 JavaScript 中删除事件监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8841138/

相关文章:

javascript - 删除使用绑定(bind)添加的事件监听器

java - 在 Hibernate 中查询内部事件监听器的最佳实践

javascript - 拦截 javascript 值 setter

javascript - 自动调用 jQuery .click() 函数

JavaScript 在特定时间绑定(bind)事件

angularjs - 检查元素是否已经有监听器

javascript - Font Awesome 图标在 IE8 中无法正确显示

javascript - Angular 列表引用在项目删除时未更新

javascript - Angular 2 编写像 ngFor、iterableDiffer 这样的结构指令可能会导致错误

javascript - WordPress 中的 jQuery slider 和未捕获的 TypeError