Google Maps API v3 - все окна infoWindows имеют одинаковый контент - PullRequest
1 голос
/ 22 мая 2010

У меня были проблемы с infoWindows и Google Maps API v3. Вначале я столкнулся с проблемой закрытия всех информационных окон при открытии новой. Я думал, что решил проблему, определив заранее «infowindow». Теперь они закрываются, когда я нажимаю на новый маркер, но содержание остается тем же. Как мне реструктурировать мой код, чтобы убедиться, что каждый раз содержимое является правильным - и только одно информационное окно открыто в данный момент?

Спасибо!

Пол

var allLatLngs = new Array();
var last = 0;
var infowindow;

function displayResults(start, count){
    if(start === undefined){
        start = last;
    }
    if(count === undefined){
        count = 20;
    }
    jQuery.each(jsresults, function(index, value) {
        if(index >= start && index < start+count){
            var obj = jQuery.parseJSON(value);
        $("#textresults").append(index + ": <strong>" + obj.name + "</strong> " + Math.round(obj.distanz*100)/100 + " km entfernt" + "<br/>");

            var myLatlng = new google.maps.LatLng(obj.geo_lat, obj.geo_lon);
            allLatLngs.push(myLatlng);

        var contentString = '<strong>'+obj.name+'</strong>';

        infowindow = new google.maps.InfoWindow({
            content: contentString
        });


            var marker = new google.maps.Marker({
                  position: myLatlng,
                  //title:"Hello World!"
              });
            marker.setMap(map);

            google.maps.event.addListener(marker, 'click', function() {
            if (infowindow) { infowindow.close(map,marker); }
              infowindow.open(map,marker);
            });
        }
    });

    last = start+count;  

1 Ответ

1 голос
/ 23 мая 2010

ОБНОВЛЕНО

Вы звоните

infowindow.open(map,marker);

внутри итерации jQuery.each, поэтому, я думаю, она будет вызывать последний элемент в итерации. Измените свой код, чтобы получить его внутри итерации jQuery.each.

var curItem = 1;   
google.maps.event.addListener(aMarker, "click", function(idx, theContent) {
   return function() {
       alert(idx);  //Should print 1 marker1, 2 for marker 2, to show it's ok.

       //Your stuff...
       if (infowindow) { 
          infowindow.close(map,marker); 
       }       
       infowindow.setContent(theContent);  
       infowindow.open(map,marker);
   }
} (curItem++, contentString)
);

Когда вы видите «return function ()», я использую закрытие javascript . Я только что использовал это закрытие для других вещей. Я избавился от других предыдущих вариантов в моем предыдущем ответе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...