当我尝试为数组中的每个DOM对象设置EventListenr时出现问题。我为每个DomEvent定义的函数对于所有这些函数变得相同(console.log(key)为所有项打印相同的键(循环中的最后一个键))。我的代码是这样的:
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);
提前感谢您提供给我的任何帮助:)
答案 0 :(得分: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问题。