2010-09-14 3 views
0

im довольно новичок в API V3 для Google Maps, и я столкнулся с проблемой, когда все инфо-окна имеют одни и те же данные, код im использует итерации через массив данных маркера и выводит маркер плюс infowindow для каждого маркера. Это мой код:Все инфо-окна имеют одинаковые данные

<script type="text/javascript"> 

(function() { 
google.maps.Map.prototype.markers = new Array(); 
google.maps.Map.prototype.addMarker = function(marker) { 
this.markers[this.markers.length] = marker; 
};})(); 

function initialize() { 

var latlng = new google.maps.LatLng(37.0691, -8.0312); 

    var myOptions = { 
    zoom: 12, 
    center: latlng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 

    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

    var house = 'images/house.png'; 

    var a = new Array(); 

    var t = new Object(); 
    t.name = "Casa De Cova" 
    t.lat = 37.0691 
    t.lng = -8.0312 
    t.ico = house 
    t.info = 'Casa De Cova Villa' 
    a[0] = t; 

    var t = new Object(); 
    t.name = "Casa Jaquinta" 
    t.lat = 37.0450 
    t.lng = -8.0442 
    t.ico = house 
    t.info = 'Jaquinta Villa' 
    a[1] = t; 

    var t = new Object(); 
    t.name = "Faro Aiport" 
    t.lat = 37.016187 
    t.lng = -7.970581 
    t.ico = 'images/plane.png' 
    t.info = 'The main Airport' 
    a[2] = t; 


    for (var i = 0; i < a.length; i++) 
    { 
     var latlng = new google.maps.LatLng(a[i].lat, a[i].lng); 
     map.addMarker(createMarker(a[i].name,latlng,a[i].ico,a[i].info)); 
    } 
} 

var counter = 1; 

function createMarker(name, latlng, icon, info) 
{ 
    var marker = new google.maps.Marker({position: latlng, map: map, icon: icon, title: name}); 

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

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

    document.getElementById(counter).onclick = function() { 
     infowindow.open(map, marker); 
    } 

    counter++; 
    return marker; 
} 
</script> 

Выпуск рода фиксируется, если «вар» заявление сделано до того «InfoWindow.open (карта, маркер);» если это будет сделано, я смогу увидеть каждое окно с соответствующими данными, но затем, когда откроется одно окно, предыдущий не будет закрыт.

сайт здесь: http://www.danhall.co.uk/algarve/map.php

Я немного потерял, любая помощь очень ценится.

ответ

3

Определенно используйте объявление var для инфополя; в противном случае infowindow является глобальным, и вы переписываете его каждый раз, когда звоните createMarker().

После этого вам просто нужно закрыть все открытые infowindows каждый раз, когда вы его показываете. Вот как я решил это раньше:

... 
var counter = 1, 
    infowindows = []; 

function closeInfoWindows() 
{ 
    var i = infowindows.length; 
    while(i--) 
    { 
     infowindows[i].close(); 
    } 
} 

function createMarker(name, latlng, icon, info) 
{ 
    var marker = new google.maps.Marker({ 
     position: latlng, 
     map: map, 
     icon: icon, 
     title: name 
    }); 

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

    infowindows.push(infowindow); 

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

    document.getElementById(counter).onclick = function() 
    { 
     infowindow.open(map, marker); 
    } 

    counter++; 
    return marker; 
} 
+0

Работает очарование, может отслеживать эту небольшую функцию в любом месте! Спасибо :) Нажимайте все объекты на массив и зацикливайте их каждый, я не думаю, что мой мозг был в точности вчера: P – Dan

Смежные вопросы