2012-02-21 76 views
0

我已經有一個標記數組,我想關閉一個打開的infowindow,當我點擊另一個標記時。我知道使用v3 API,我可以使用InfoWindow.close()方法關閉infowindow。但是在哪裏添加代碼?我嘗試了很多,但都失敗了。 我還有一個問題,爲什麼需要點擊「side_bar_div」tiwce中的鏈接調用方法myclick(i)?如何關閉一個infowindow

<script type="text/javascript"> 
    var markers=[]; 
    var side_bar_html='<table border=0 cellpadding=0><tr>'; 
    var tdrow = 1; 
    var i = 0; 
    function creatmarker(lat,long,map,html,index){ 
    var mylatlng = new google.maps.LatLng(lat,long); 
    var marker = new google.maps.Marker({ 
    position: mylatlng, 
map: map, 
zIndex: index 
    }); 
var infowindow = new google.maps.InfoWindow({ 
    content: html 
}); 
markers.push(marker); 
side_bar_html +='<td width=330 valign=top align=left><a id="side_bar_'+i+'" href="javascript:myclick('+ (markers.length-1) +');">'+html+'</a></td>'; 
tdrow++; 
i++; 
if (tdrow > 2){side_bar_html += '</tr><tr>'; tdrow =1; } 
google.maps.event.addListener(marker,'click',function(){ 
    infowindow.open(map,marker); 
}); 
    function myclick(i){ 
var id="side_bar_"+i; 
google.maps.event.addDomListener(document.getElementById(id), "click", function(){   google.maps.event.trigger(markers[i], "click"); 
}); 
    } 
    function initialize(){ 
var myOptions = { 
     zoom: 11, 
     center: new google.maps.LatLng(-33.9, 151.2), 
     mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 
    var map = new google.maps.Map(document.getElementById("mymap"),myOptions); 
    var lat = "-33.890542"; 
    var lng = "151.274856"; 
    var html = 'Bondi Beach'; 
    creatmarker(lat,lng,map,html,5); 
    var lat = "-33.923036"; 
    var lng = "151.259052"; 
    var html = 'Coogee Beach'; 
    creatmarker(lat,lng,map,html,4); 
    var lat = "-34.028249"; 
    var lng = "151.157507"; 
    var html = 'Cronulla Beach'; 
    creatmarker(lat,lng,map,html,3); 
    var lat = "-33.80010128657071"; 
    var lng = "151.28747820854187"; 
    var html = 'Manly Beach'; 
    creatmarker(lat,lng,map,html,2); 
    var lat = "-33.950198"; 
    var lng = "151.259302"; 
    var html = 'Maroubra Beach'; 
    creatmarker(lat,lng,map,html,1); 
    side_bar_html +='</tr></table>'; 
    document.getElementById("side_bar_div").innerHTML = side_bar_html; 
} 
google.maps.event.addDomListener(window, 'load', initialize); 
</script> 

回答

1

試試下面的代碼片段:

var infoWindows = [];         

     google.maps.event.addListener(marker,'click',function(){ 
closeInfowindow(); 
    var infowindow = new google.maps.InfoWindow({ 
    content: html 
}); 
    infowindow.open(map,marker); 
infoWindows[0] = infowindow; 
    }); 

function closeInfowindow(){ 
if(infoWindows.length > 0){ 
infoWindows[0].set("marker",null); 
infoWindows[0].close(); 
infoWindows.length = 0; 
} 
} 

希望這有助於你:-)

+0

是編輯和它的工作對我來說在本地:-) – Unknown 2012-02-21 03:37:22

+0

這是不行的,太,我甚至無法打開信息窗口的任何。 – John 2012-02-21 05:56:01

+0

你可以用你的代碼做一個小提琴嗎? – Unknown 2012-02-21 05:57:13

0

做到這一點,正確的方法是將其存儲在一個局部變量,然後添加一個事件偵聽像這樣:

function addeventlistenerinfo(marker, infowindow, i){ 
    google.maps.event.addListener(marker, 'click', function() { 
      if (currentinfowindow) 
       currentinfowindow.close(); 
      infowindow.open(map,marker); 
      currentinfowindow = infowindow; 
     }); 
     markersarray[i] = marker; 
} 

currentinfowindow是一個全局變量,它將只保存打開的infowindow if一個存在。

無需使用數組或一個額外的方法:)

相關問題