Информационное окно API Карт Google не отображается - PullRequest
9 голосов
/ 27 ноября 2010

Мой код выглядит так:

var map = /*some google map - defined earlier in the code*/;
var geocoder = new google.maps.Geocoder();
var address = 'Some Address, Some Street, Some Place';
geocoder.geocode({'address':address},function(results,status){
    if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        var infobox = new google.maps.InfoWindow({
            content: 'Hello world'
        });
        for(i in results){
            var marker = new google.maps.Marker({
                map: map, 
                position: results[i].geometry.location
            });
            google.maps.event.addListener(marker, 'click', function() {
                infobox.setContent('blablabla');
                infobox.open(map,marker);
                alert(infobox.content); //displays 'blablabla'
            });
        }
    }
});

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

Проблема в том, что информационное окно отображается пустым.

Снимок экрана здесь:

screenshot

PS: использование Maps API V3

Ответы [ 4 ]

23 голосов
/ 08 мая 2012

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

2 голосов
/ 27 ноября 2010

Обычно вам нужно использовать функцию, внешнюю по отношению к петле добавления маркеров, чтобы добавить информационное сообщение к каждому маркеру ... пример и подробное объяснение см .: http://code.google.com/apis/maps/documentation/javascript/events.html#EventClosures

0 голосов
/ 17 ноября 2017

Я решил проблему, добавив код ниже.

setTimeout (function () {GeocodeMarker.info.open (GoogleMap, GeocodeMarker); }, 300);

Спасибо

0 голосов
/ 29 ноября 2010

Вот как я это сделал.

var map,markersArray,infowindow; //infowindow has been declared as a global variable.

function initialize(){
    var myOptions = {
    zoom: 14,
    center: new google.maps.LatLng(51.5001524,-0.1262362),
    mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById("map_canvas"),
                                myOptions);

    infowindow = new google.maps.InfoWindow(
                    { 
                        size: new google.maps.Size(150,50)
                    });

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

    markersArray = [];
}

function createMarker(latlng, html,zoom) {
   var contentString = html;
    var marker = new google.maps.Marker({
        position: latlng,
        map: map,
        zIndex: Math.round(latlng.lat()*-100000)<<5
    });

    google.maps.event.addListener(marker, 'click', function() {
        infowindow.setContent(contentString); 
        infowindow.open(map,marker);
    });
    marker.MyZoom = zoom; 
    return marker; 
}

Вы можете найти рабочий пример здесь и полный JavaScript здесь .

...