2010-09-16 76 views
2

有24個div對象在等待/正在傾聽鼠標點擊。點擊一個div對象後,我想從所有24個div對象中刪除EventListener事件發生後,在JavaScript中刪除EventListener?

for (var i=1;i<=24;i++){ 
    document.getElementById('div'+i).addEventListener('click',function(event){ 
     for (var z=1;z<=24;z++){ 
      document.getElementById('div'+z).removeEventListener()//Problem lies here 
     } 

     //Some other code to be run after mouseclick 

     },false); 

} 

的問題是,所述removeEventListener嵌套在addEventListener和我需要定義類型,聽衆,字幕的屬性中removeEventListener方法。而且我認爲由於嵌套定義聽衆是不可能的。

我也試圖定義一個函數的名字,但它並沒有奏效:

for (var i=1;i<=24;i++){ 
    document.getElementById('div'+i).addEventListener('click',function helpme(event){ 
     for (var z=1;z<=24;z++){ 
      document.getElementById('div'+z).removeEventListener('click',helpme,false); 
     } 

     //Some other code to be run after mouseclick 

     },false); 

} 

回答

6

應該有一個名爲函數工作。如果您的第二種方法無法正常工作,請嘗試將初始偵聽器存儲到變量中,如下所示:

var handler = function(event) { 
    for(...) { 
     removeEventListener('click', handler, false); 
    } 
}; 

addEventListener('click', handler, false); 

Ps。如果你關心速度,你可能希望考慮只使用一個事件處理程序。您可以將處理程序放入div的父元素,然後從那裏委派事件。有24個處理程序,您目前的方法可能不會有非常大的性能影響,但是如果它感覺緩慢,您應該記住這一點。

+0

嗨Jani!有效! 我想非常感謝你!我試圖整天沒有任何成功 – einstein 2010-09-16 05:50:23

+0

老話題,但由於某種原因,這不適合我。替我工作(停止事件監聽器)是將事件監聽器設置爲空函數。 – MikeM 2016-01-16 14:36:08