2012-02-21 82 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一个存在。

无需使用数组或一个额外的方法:)

相关问题