当我尝试为数组中的每个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);
提前感谢您的任何帮助,你可以给我:)
这里的问题是你的循环内部的闭包功能。
你可以像这样解决它:
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问题。