Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript removeEventListener不删除侦听器_Javascript - Fatal编程技术网

Javascript removeEventListener不删除侦听器

Javascript removeEventListener不删除侦听器,javascript,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); } 但由于某

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

我是这样设置的:

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);                 
}

但由于某些原因,事件侦听器仍然被分配。。。。我这里没有得到什么?

您需要保留对事件侦听器的引用,以便删除它。如果愿意,可以将其存储在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);
}
for(变量i=0;i
我感觉这是因为您在
removeEventListener
中引用的函数与传递到
addEventListener
中的函数不同(匿名)。
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);
}