Google API V3一次只能打开一个infoWindow

时间:2012-10-03 17:46:17

标签: javascript google-api infowindow

我根本不懂javascript,但我设法让地图上的所有东西都工作,除了这一件事。我正在为一个论坛的一个功能工作,成员向我发送他们的城市和州,然后我将它们添加到地图中。这就是我所拥有的:http://l4ptester.solidwebhost.com/L4p.html 如果你点击几个地图标记,你会发现你可以随时打开多个infoWindows,我不想要那样。我只想让infoWindow一次打开。因此,如果我点击佛罗里达州的标记,然后点击加利福尼亚州的标记,那么佛罗里达州的标记就会关闭。

以下是我的代码中地图标记的条目:

var InvadermooseLL = new google.maps.LatLng(27.321984,-82.527666);
  var contentString = 
    '<div id="content">'+
    '<center> <strong>Invadermoose</strong> </center>'+
        '<img src="http://www.luxury4play.com/customavatars/avatar16771_3.gif">'+
        '<div id="bodyContent">'+
        '<a href="http://www.luxury4play.com/members/invadermoose.html" '+
        'target="_blank">Invadermoose&#39;s L4P Profile</a>'+
        '<br/><font size="2">(Opens in new tab)</font>'+
        'City: Sarasota'+
        'State: Florida'+
        '</div>'+
        '</div>';

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

var InvadermooseMKR = new google.maps.Marker({
    position: InvadermooseLL,
    map: map,
    title:"Invadermoose"
});

google.maps.event.addListener(InvadermooseMKR, 'click', function() {
    InvadermooseIW.open(map,InvadermooseMKR);
    IrelentlessIW.close(map,IrelentlessMKR);
    Hollywood85IW.close(map,Hollywood85MKR);
    HazeMythIW.close(map,HazeMythMKR);
    jagkidIW.close(map,jagkidMKR);
    DiegoVIW.close(map,DeigoVMKR);
    RaceMindedIW.close(map,RaceMindedMKR);
});

我会解释一下。 Invadermoose是获取地图标记的用户,因此我将其用作ID来保持其有条理。所以var InvadermooseLL基本上是Invadermoose LatLang,InvadermooseMKR是Invadermoose Marker。它只是帮助我保持井井有条。

现在,在脚本的底部我有所有'点击'功能。在我看来它会关闭其他成员标记,但它不起作用。我在Stack溢出的某个地方读到了这样做的方法,但它不会工作。

我基本上为每个拥有地图标记的用户重复相同的代码,我只需使用我的识别前缀(LL,MKR,IW)和一些“点击”功能将Id更改为用户名。

1 个答案:

答案 0 :(得分:0)

这比您想象的要容易,在示例中您可以发现解决方案是重用InfoWindow。这比为每个用户创建一个新的更清晰。如果只有一个InfoWindow,您只需更新它的位置,InfoWindow在旧位置关闭,然后再在新位置打开。

这样做的副作用是,不可能同时打开多个InfoWindow,因为实际上只有一个。{/ p>