如何在循环中设置DomEvent

时间:2017-12-31 20:51:33

标签: javascript leaflet

当我尝试为数组中的每个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);

提前感谢您提供给我的任何帮助:)

1 个答案:

答案 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问题。