У вас очень распространенная проблема закрытия в цикле for in
:
Переменные, заключенные в замыкание, совместно используют одну и ту же среду, поэтому к тому времени, когда будет вызван обратный вызов click
из addListener
, цикл будет работать, а переменная info
будет указывать на последний объект, который оказывается последним InfoWindow
созданным.
В этом случае одним из простых способов решения этой проблемы было бы увеличение объекта Marker
с помощью InfoWindow
:
var marker = new google.maps.Marker({map: map, position: point, clickable: true});
marker.info = new google.maps.InfoWindow({
content: '<b>Speed:</b> ' + values.inst + ' knots'
});
google.maps.event.addListener(marker, 'click', function() {
marker.info.open(map, marker);
});
Это может быть довольно сложной темой, если вы не знакомы с тем, как работают замыкания. Вы можете ознакомиться со следующей статьей Mozilla для краткого введения:
Также имейте в виду, что API v3 позволяет использовать несколько InfoWindow
на карте. Если вы хотите, чтобы в данный момент был виден только один InfoWindow
, вместо этого следует использовать один объект InfoWindow
, а затем открывать его и изменять его содержимое при каждом щелчке маркера ( Source ).