2010-10-20 7 views
2

Avoir le même problème que d'autres ont eu sur ce site où il montre seulement l'information de la fenêtre info du dernier marqueur dans tous les marqueurs. Impossible de résoudre cela avec l'une des solutions proposées. De plus, le dernier de mes marqueurs ne montre aucune fenêtre d'information.Infowindow aide sur google maps api 3

<script src="http://www.google.com/jsapi"></script> 
<script type="text/javascript" src="data2.json"></script> 
<script type="text/javascript" src="js/markerclusterer.js"></script> 

<script type="text/javascript"> 
    google.load('maps', '3', { 
    other_params: 'sensor=false' 
    }); 
    google.setOnLoadCallback(initialize); 

    function initialize() { 

var center = new google.maps.LatLng(55.4419, -4.1419); 

var map = new google.maps.Map(document.getElementById('map'), { 
     zoom: 5, 
     center: center, 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    }); 


var markers = []; 
for (var i = 0, dataPhoto; dataPhoto = data.markers[i]; i++) { 
     var latLng = new google.maps.LatLng(dataPhoto.latitude,dataPhoto.longitude); 
     var theTitle = dataPhoto.address; 
     var contentString = '<div align="left"><img src="logo.gif" alt="" width="242" height="71" /><br /><br /><p style="color:#000000;">' + data.markers[i].address + '<br />' + dataPhoto.telephone + '</p></div>'; 



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



    var thisIcon = 'markers/image.png'; 


       for (var i = 0, marker; marker = markers[i]; i++) {google.maps.event.addListener(marker, 'click', function() {infowindow.open(map,this);}); 
     } 


     var marker = new google.maps.Marker({ 
     position: latLng, 
     clickable: true, 
     title: theTitle, 
     icon: thisIcon, 
     }); 

     markers.push(marker); 
    } 
    var markerCluster = new MarkerClusterer(map, markers); 


    } 


</script> 

Toute aide très appréciée!

Répondre

5

Je n'ai pas testé, mais il devrait fonctionner - aussi s'il vous plaît jeter un oeil à: http://code.google.com/apis/maps/documentation/javascript/events.html#EventClosures

<script src="http://www.google.com/jsapi"> 
</script> 
<script type="text/javascript" src="data2.json"> 
</script> 
<script type="text/javascript" src="js/markerclusterer.js"> 
</script> 
<script type="text/javascript"> 
    google.load('maps', '3', { 
     other_params: 'sensor=false' 
    }); 
    google.setOnLoadCallback(initialize); 

    function initialize(){ 

     var center = new google.maps.LatLng(55.4419, -4.1419); 

     var map = new google.maps.Map(document.getElementById('map'), { 
      zoom: 5, 
      center: center, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }); 


     var markers = []; 
     for (var i = 0, dataPhoto; dataPhoto = data.markers[i]; i++) { 
      var latLng = new google.maps.LatLng(dataPhoto.latitude, dataPhoto.longitude); 
      var theTitle = dataPhoto.address; 
      var contentString = '<div align="left"><img src="logo.gif" alt="" width="242" height="71" /><br /><br /><p style="color:#000000;">' + data.markers[i].address + '<br />' + dataPhoto.telephone + '</p></div>'; 
      var thisIcon = 'markers/image.png'; 
      var marker = new google.maps.Marker({ 
       position: latLng, 
       clickable: true, 
       title: theTitle, 
       icon: thisIcon, 
      }); 

      attachIWindow(contentString, marker); 


      markers.push(marker); 
     } 
     var markerCluster = new MarkerClusterer(map, markers); 


    } 

    function attachIWindow(content, marker){ 


     var infowindow = new google.maps.InfoWindow({ 
      content: content, 

     }); 
     google.maps.event.addListener(marker, 'click', function(){ 
      infowindow.open(map, marker); 
     }); 
    } 
</script> 
+0

Merci! Juste à déplacer où vous définissez la fonction attachIWindow dans votre solution au-dessus de l'endroit où il est appelé, alors cela fonctionne parfaitement! – Cathy

0

Si je comprends bien, jetez un coup d'œil aux fermetures et essayez de les comprendre correctement. Ensuite, la magie javascript se produira!

2

Nous pouvons utiliser fermetures pour résoudre ce problème

Utilisez l'extrait de code ci-dessous ajouter fenêtre info à marqueur

function AddInfoWidnow(marker,message) 
{ 
    var infowindow = new google.maps.InfoWindow({ content: message }); 

    google.maps.event.addListener(marker, 'click', function() { 

    infowindow.open(marker.get('map'), marker); 

    }); 

} 

Pour voir un échantillon de travail, référez-vous à here

Questions connexes