2012-09-03 71 views
2

我正在處理涉及Google Maps API和infowindows的問題。當我點擊一個標記時,會彈出一個infowindow,並且我正在嘗試這樣做,以便在發生這種情況時,該標記的lat/lng顯示在infowindow中。在這種情況下,緯度/經度被存儲在所述停止陣列中:谷歌地圖infowindow顯示每個標記相同的內容

<script type="text/javascript" 
    src="http://maps.googleapis.com/maps/api/js?sensor=false"> 
</script> 
<script type="text/javascript"> 
    var map; 
    var marker; 
    var infowindow; //Global infowindow created 
    function initialize() { 
     var latlng = new google.maps.LatLng(37.784, -122.408); 
     var stops = new Array(); 
     stops = [ 
    new google.maps.LatLng(37.7655, -122.4525899), 
    new google.maps.LatLng(37.7649999, -122.45656), 
    new google.maps.LatLng(37.7643, -122.4608199), 

    ]; 
     var myOptions = { 
      zoom: 10, 
      mapTypeId: google.maps.MapTypeId.ROADMAP, 
      center: new google.maps.LatLng(37.7655, -122.4525899) 

     }; 
     map = new google.maps.Map(document.getElementById("content"), 
    myOptions); 
     infowindow = new google.maps.InfoWindow({ //infowindow options set 
      maxWidth: 355 
     }); 

     var i = 0; 
     for (i < 0; i < stops.length; i++) { 
      marker = new google.maps.Marker({ 
       position:stops[i], 
       map: map, 
       title: "Stop Coords: "+ stops[i] 
      }); 
      var len=stops.length; 
      popupDirections(marker, len, stops); 
     } 
    } 

    function popupDirections(marker, len,stops) { 
     //this function created listener listens for click on a marker 
     google.maps.event.addListener(marker, 'click', function() { 
      for (var i = 0; i < len; i++) 
      { infowindow.setContent("Stop coords: " + stops[i]); } //sets the content of your global infowindow to string "Tests: " 
      infowindow.open(map, marker); //then opens the infowindow at the marker 
     }); 
    } 

現在,當我將鼠標懸停在每個標記,正確的緯度/經度示出,但是當我點擊標記和信息窗口彈出,我不斷得到停止的經濟/經濟[2]。我不確定問題是什麼,我對JS的知識是相當有限的,我很幸運地在這裏找到一個有用的帖子,展示瞭如何創建infowindows。

回答

1

在我看來,解決問題的最佳辦法是給每個標記的自定義對象屬性stopCoords

for (i < 0; i < stops.length; i++) { 
    marker = new google.maps.Marker({ 
     position: stops[i], 
     map: map, 
     title: "Stop Coords: " + stops[i], 
     stopCoords: stops[i] 
    }); 
    var len = stops.length; 
    popupDirections(marker, len, stops); 
} 

然後,在popupDirections功能,請回吧(UPDATE或使用marker.position相反,但重點是,你可以讓stopCoords成爲你想要的任何值)。

for (var i = 0; i < len; i++) { 
     infowindow.setContent("Stop coords: " + marker.stopCoords); 
    } 

DEMOhttp://jsfiddle.net/yV6xv/580/

我會拋出一些流行語來解釋爲什麼你原來的代碼不起作用:與變量的作用域和閉包做。

+0

非常感謝,我有一個預感,它與範圍。 –

+0

此JSFiddle丟失:( –

相關問題