Я знаю, что подобные вопросы задавались ранее, но предоставленные ответы не решают мою проблему. У меня есть цикл, в котором я перебираю места, создаю маркеры и добавляю обработчики событий. Когда я нажимаю на любой из маркеров впоследствии, все они показывают ту же информацию.
var geocoder;
var map;
function initialize() {
// Load places from xml file
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.open("GET","person_city_clause.xml",false);
xmlhttp.send();
xmlDoc=xmlhttp.responseXML;
var text =
xmlDoc.getElementsByTagName("text");
var places = [];
var descriptions = [];
for (var i=3; i<text.length; i++)
{
places.push(text[i].childNodes[0].nodeValue); // place
descriptions[places[i]] = descriptions.push(text[i-2].childNodes[0].nodeValue); // person
i=i+3;
}
// Create inital Google Map
var latlng = new google.maps.LatLng(-34.397, 150.644);
var myOptions = {
zoom: 2,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
// fill map with place markers
geocoder = new google.maps.Geocoder();
var infowindow = new google.maps.InfoWindow();
var marker = [];
for (var i=0; i<places.length; i++)
{
geocoder.geocode( { 'address': places[i]}, function(results, status)
{
if (status == google.maps.GeocoderStatus.OK)
{
marker[i] = new google.maps.Marker({
map: map,
position: results[0].geometry.location});
listenMarker(marker[i], results[0].formatted_address );
}
})
}
function listenMarker(marker, place)
{
google.maps.event.addListener(marker, 'click', function(){
infowindow.setContent("" + place);
infowindow.open(map, this);});
}
}
edit: когда я делаю alert (i) после geocoder.geocode, я всегда получаю 32 (размер массива местах).