Google 用 for() 映射 infowindows 问题

Google maps infowindows problems with the for()

我正在尝试使用 for() 放置一个包含不同内容的信息窗口,但它不起作用。这是我的代码:

var infowindow=[];
var myMarker=[];
var marker=[];
for (i = 0; i < dl.length; i++) {
    myMarker[i]=new google.maps.LatLng(lt[i], ln[i]);
    marker[i] = new google.maps.Marker({
    position: myMarker[i],
    map: map
  }); 
}

for (var i = 0; i < dl.length; i++) {



google.maps.event.addListener(marker[i],'mouseover', function(){

    infowindow[i] = new google.maps.InfoWindow({
    content:dl[i]
    });
  infowindow[i].open(map,marker[i]);
  });

  google.maps.event.addListener(marker[i],'mouseout',function() {
    infowindow[i].close();
  });
  google.maps.event.addListener(marker[i],'click',function() {
    alert("Y ahora te abriría otra pagina... si tuviera una"+i);
  });


}

第一个 for 一切都很好,但是当我尝试使用事件侦听器时,它就变坏了。

变量:dl[]lt[]ln[]之前已初始化。

信息窗口不是那样工作的。创建信息窗口的单个副本(而不是维护数组)并在每个标记的鼠标悬停事件期间使用 infowindow.setContent() 设置其内容。

编辑:您在回复中的解决方案会起作用,或者这里有一个更简洁的解决方案:

var myMarker=[];
var marker;
var infoWindow = new google.maps.InfoWindow();
for (i = 0; i < dl.length; i++) {
    myMarker[i]=new google.maps.LatLng(lt[i], ln[i]);
    marker = new google.maps.Marker({
    position: myMarker[i],
    map: map
  }); 
  (function(msg) {marker.addListener('mouseover', function() {
    infoWindow.setContent(msg);
    infoWindow.open(marker.get('map'), marker);
    });
  })(dl[i]);
  marker.addListener('mouseout', function() {
    infoWindow.close();
  });
}

我结束了这个,效果很好

var myMarker=[];
var marker;
for (i = 0; i < dl.length; i++) {
    myMarker[i]=new google.maps.LatLng(lt[i], ln[i]);
    marker = new google.maps.Marker({
    position: myMarker[i],
    map: map
  }); 
  attachSecretMessage(marker, dl[i]);
}


function attachSecretMessage(marker, secretMessage) {
  var infowindow = new google.maps.InfoWindow({
    content: secretMessage
  });

  marker.addListener('mouseover', function() {
    infowindow.open(marker.get('map'), marker);

  });

  marker.addListener('mouseout', function() {
    infowindow.close();
  });

  }