2010-05-22 71 views
1

我一直遇到infoWindows和Google Maps API v3的問題。 最初,我遇到了其他人在打開新窗口時關閉infoWindows的問題。 我想通過事先定義「infowindow」來解決問題。現在,當我點擊一個新標記時它們關閉,但內容相同。 我應該如何重新構造我的代碼,以確保內容每次都是正確的 - 並且在給定時間只有一個infoWindow打開?Google Maps API v3 - infoWindows全部具有相同內容

謝謝!

保羅

var allLatLngs = new Array(); 
var last = 0; 
var infowindow; 

function displayResults(start, count){ 
    if(start === undefined){ 
     start = last; 
    } 
    if(count === undefined){ 
     count = 20; 
    } 
    jQuery.each(jsresults, function(index, value) { 
     if(index >= start && index < start+count){ 
      var obj = jQuery.parseJSON(value); 
     $("#textresults").append(index + ": <strong>" + obj.name + "</strong> " + Math.round(obj.distanz*100)/100 + " km entfernt" + "<br/>"); 

      var myLatlng = new google.maps.LatLng(obj.geo_lat, obj.geo_lon); 
      allLatLngs.push(myLatlng); 

     var contentString = '<strong>'+obj.name+'</strong>'; 

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


      var marker = new google.maps.Marker({ 
        position: myLatlng, 
        //title:"Hello World!" 
       }); 
      marker.setMap(map); 

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

    last = start+count; 

回答

1

修訂

要調用

infowindow.open(map,marker); 

的jQuery.each迭代裏面,因此,我認爲這將調用在迭代的最後一個項目。 修改您的代碼,以便在jQuery.each迭代中獲得此代碼。

var curItem = 1; 
google.maps.event.addListener(aMarker, "click", function(idx, theContent) { 
    return function() { 
     alert(idx); //Should print 1 marker1, 2 for marker 2, to show it's ok. 

     //Your stuff... 
     if (infowindow) { 
      infowindow.close(map,marker); 
     }  
     infowindow.setContent(theContent); 
     infowindow.open(map,marker); 
    } 
} (curItem++, contentString) 
); 

當你看到 「恢復功能()」 我使用javascript closure。我剛剛用這個閉包做了其他的東西。我在之前的回答中擺脫了以前的其他變化。

+0

嗨johncatfish, 謝謝你的回答。但是,恐怕我不太明白如何使用它。我用你的代碼替換了infowindow.open(map,marker),但它只拋出錯誤。 你能解釋一下嗎? 謝謝, 保羅 – 2010-05-24 05:24:43