2017-12-31 242 views
0

배열 내부의 각 DOM 객체에 대해 EventListenr을 설정하려고하면 문제가 발생합니다. 각 DomEvent에 대해 정의한 함수는 모두 동일합니다 (console.log (key)는 모든 항목에 대해 동일한 키 (루프의 마지막 키)를 인쇄합니다. 내 코드는 다음과 같다 : 루프 내부에서 DomEvent를 설정하는 방법

var dom = {}; 
var popupContent = L.DomUtil.create('div'); 
for(var key in this._info){ 
    dom[key] = L.DomUtil.create('a', "", popupContent); 
    dom[key].innerHTML = key; 
    dom[key].href = "#"; 
    L.DomEvent.on(dom[key], 'click', function(){ 
     //do some stuff 
     console.log(key); 
    });   
} 

var popup = L.popup(); 
popup.setLatLng(latlng) 
     .setContent(popupContent) 
     .openOn(this._map); 

당신이 내게 줄 수 :

답변

1

문제는 여기에 루프의 내부 폐쇄 기능입니다 사전에 어떤 도움을 주셔서 감사합니다.

for(var key in this._info){ 
    (function(k) { 
    dom[k] = L.DomUtil.create('a', "", popupContent); 
    dom[k].innerHTML = key; 
    dom[k].href = "#"; 
    L.DomEvent.on(dom[k], 'click', function(){ 
     //do some stuff 
     console.log(k); 
    }); 
    })(key) 
} 

을 또는 당신은 당신의 루프 내에서 let 대신 var를 사용할 수 있습니다

이 같은 문제를 해결할 수 있습니다.

자세한 내용은 this 질문을 확인하십시오.