2017-12-31 115 views
0

Ich habe ein Problem, wenn ich versuche, EventListenr für jedes DOM-Objekt in einem Array zu setzen. Die Funktion, die ich für jedes DomEvent definiere, wird für alle dasselbe (console.log (key) druckt für alle Elemente den gleichen Schlüssel (letzter Schlüssel in der Schleife)). mein Code wie folgt aus:Wie setze ich DomEvent innerhalb Schleife

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

Sie für jede Hilfe im Voraus danken können Sie mir :)

Antwort

1

Das Problem hierbei ist, mit Verschlussfunktion innerhalb Ihrer Schleife.

Sie können es wie folgt beheben:

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

Oder Sie können einfach let statt var in Ihrer Schleife verwenden.

Für weitere Informationen überprüfen Sie this Frage.

Verwandte Themen