2013-11-04 119 views
1

我有一個事件監聽器對我的元素,它不會因爲某些原因而被刪除,我不知道爲什麼。removeEventListener沒有刪除監聽器

我設置這樣的:

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

我有一種感覺,因爲你不是在'removeEventListener'中引用與傳遞給'addEventListener'的函數相同的(匿名)函數。 – micahbf

回答

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

啊,這工作很好!謝謝! – Sir