Несколько информационных окон Google Maps API v3 не открываются при нажатии

Может кто-нибудь объяснить, почему мои информационные окна Google Maps открываются только в нижнем левом маркере? См. здесь скрипку http://jsfiddle.net/Vj3nw/7/

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

Я считаю, что проблема связана с приведенным ниже циклом, и этот вопрос, похоже, имеет ту же проблему Установка onclick для использования текущего значения переменной в цикле

«Проблема, с которой вы столкнулись, заключается в том, что javascript не использует область действия блока. Вместо этого все переменные имеют время жизни своей содержащей функции. Таким образом, во всех функциях onclick была только одна захваченная a, и все они видят ее конечное значение».

Я просто не могу перевести это решение на свое.

Большое спасибо.

for (var i = 0; i < 4; i++) {
    var marker = new google.maps.Marker({
        position: flightPlanCoordinates[i],
        icon: Symbol,
        map: map
    });

    infowindow = new google.maps.InfoWindow();
    infowindow.setContent("hello");

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

}

person Lars    schedule 29.01.2013    source источник


Ответы (1)


Создание ваших маркеров и добавление слушателей в их собственную функцию, вызываемую из цикла, как работает обновленная fiddle.

function create_marker(i,flightPlanCoordinates,Symbol,map){
        var marker = new google.maps.Marker({
            position: flightPlanCoordinates[i],
            icon: Symbol,
            map: map
        });

        infowindow = new google.maps.InfoWindow();
        infowindow.setContent("hello" + i);

        google.maps.event.addListener(marker, 'click', function() {
            infowindow.open(map,marker);
        });
    }
person Craig Blagg    schedule 29.01.2013
comment
Большое спасибо, это здорово. Это пример замыкания? - person Lars; 29.01.2013