如何在循环中设置DomEvent

问题描述 投票:0回答:1

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

提前感谢您的任何帮助,你可以给我:)

javascript leaflet
1个回答
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问题。

© www.soinside.com 2019 - 2024. All rights reserved.