Информационные окна отображаются на одном маркере

for (var i = 0; i < locs.length; i++) {
                var marker = new google.maps.Marker({
                    position: new google.maps.LatLng(locs[i][0], locs[i][1])
                    , map: map
                    , title: "Hello World!"
                    , icon: iconImage
                    , clickable: true
                });

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

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

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


person levi    schedule 19.07.2013    source источник


Ответы (1)


Поскольку ваша маркерная переменная не сохраняется за пределами вашего цикла foreach, я бы подумал, что api карт не отслеживает их должным образом. При работе с маркерами рекомендуется сохранять активные маркеры в массиве, чтобы вы могли избавиться от них позже (или иным образом управлять ими). Попробуйте что-то вроде этого:

var markers = Array(); //make sure this is scoped properly

for (var i = 0; i < locs.length; i++) {
    var marker = new google.maps.Marker({
        position: new google.maps.LatLng(locs[i][0], locs[i][1])
        , map: map
        , title: "Hello World!"
        , icon: iconImage
        , clickable: true
    });

    var index = markers.push(marker) -1;

    markers[index].info = new google.maps.InfoWindow({
        content: contentString
    });

    google.maps.event.addListener(markers[index], 'click', function () {
        marker.info.open(map, marker);
    });        
}
person Mansfield    schedule 19.07.2013