removeEventListener不删除侦听器

时间:2013-11-04 01:57:52

标签: javascript

我的元素上有一个事件监听器,由于某种原因我不知道为什么会删除。

我这样设置:

for (i = 0; i < data[0].length; i++) {
  (function(i){
    document.getElementById(i).addEventListener('click',
        function(){var self = this; begin(i,self,1);},false);})(i);                 
}

删除听众:

function begin(i,el,type){
    console.log('test');
    el.removeEventListener('click',function(){begin(i,el,type);},false);
}

但是某些原因仍然分配了事件监听器....我不能在这里得到什么?

1 个答案:

答案 0 :(得分:2)

您需要保留对事件侦听器的引用,以便可以将其删除。如果愿意,可以将它存储在DOM元素上。

for (var i = 0; i < data[0].length; i++) {
    (function(i){
        var el = document.getElementById(i);
        el['click-listener'] = function () { 
            var self = this;
            begin(i, self, 1);
        };
        el.addEventListener('click', el['click-listener'],false);
    })(i);                 
}

function begin(i, el, type) {
    el.removeEventListener('click', el['click-listener'], false);
}