Маркеры Карт Google показывают ту же информацию - PullRequest
0 голосов
/ 12 октября 2011

Я знаю, что подобные вопросы задавались ранее, но предоставленные ответы не решают мою проблему. У меня есть цикл, в котором я перебираю места, создаю маркеры и добавляю обработчики событий. Когда я нажимаю на любой из маркеров впоследствии, все они показывают ту же информацию.

  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 (размер массива местах).

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Вам также нужен массив для информационных окон, если вы этого не сделаете, переменная информационного окна будет переопределена следующим маркером ..

Содержимое для всех них одинаковое ..

РЕДАКТИРОВАТЬ: Просто создайте другой глобальный массив:

    var locations = [];

    ..code blabla
    if(status == google.maps.GeocoderStatus.OK)
    {
        for(int k = 0; k<results.length;k++{
            locations.push = results[k].geometry.location;
        }
    }

Вы можете пройти через этот массив, используя это:

for(int i=0; i<locations.length;i++)
{

}
0 голосов
/ 12 октября 2011

Попробуйте установить локальную переменную в контексте функции, которая создает функцию события:

...

var index = i;

if (status == google.maps.GeocoderStatus.OK) {

  ...

  infowindow.setContent("" + index);
...