Google Maps InfoWindow в JavaScript (создание нескольких InfoWindows через цикл) - PullRequest
0 голосов
/ 16 июля 2011

Я вытаскиваю свой объект latlng из базы данных, и когда я перебираю запрос в javascript, все маркеры заполняются просто отлично, но когда я нажимаю на один из них, все они открывают один и тот же объект infoWindow на другом маркере. Я предполагаю, что это какая-то проблема с именами, но у меня возникают проблемы с выяснением причины, потому что все это выглядит правильно для меня. следующий код находится в теге cfoutput, создающем цикл.

var latlng_#get_latlng.recordcount# = new google.maps.LatLng(#get_latlng.mlat#,#get_latlng.mlong#); 
var marker_#get_latlng.recordcount# = new google.maps.Marker({
    position: latlng_#get_latlng.recordcount#,
    map: map,
    title: "test"
});

var contentString_#get_latlng.recordcount# = "test" + #get_latlng.recordcount#;

var infowindow_#get_latlng.recordcount# = new google.maps.InfoWindow({
    content: contentString_#get_latlng.recordcount#
});

google.maps.event.addListener(marker_#get_latlng.recordcount#, 'click', function() {
    infowindow_#get_latlng.recordcount#.open(map,marker_#get_latlng.recordcount#);
});

Ответы [ 2 ]

1 голос
/ 16 июля 2011

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

function addMarker(lat, lng, title, content) {
    var latlng = new google.maps.LatLng(lat, lng);
    var marker = new google.maps.Marker({
        position: latlng,
        map: map,
        title: title
    });
    var infowindow = new google.maps.InfoWindow({ content: content });
    google.maps.event.addListener(marker, "click", function() {
        infowindow.open(map, marker);
    });
}

Затем в вашем цикле:

addMarker(#get_latlng.mlat#,#get_latlng.mlong#,"#get_latlng.title#","#get_latlng.content#");
1 голос
/ 16 июля 2011

Разве 'recordcount' не возвращает количество значений в вашем наборе результатов? В этом случае все ваши имена переменных будут одинаковыми. Поэтому все они будут правильно отображаться, но будут постоянно перезаписывать ссылку на переменную JavaScript: и все будут создавать информационное окно на основе последнего, которое вы сделали.

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

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