Google maps api 3 当地图上显示多个标记时,仅打开信息框

Google maps api 3 当地图上显示多个标记时,仅打开信息框,google-maps-api-3,infobox,Google Maps Api 3,Infobox,我有一个createMarker()函数,用于在google地图上放置多个标记。代码如下: function createMarker(点、客户ID、街道添加、城市、州、邮政编码、地址、电话、网站、公司) { var infowindowHover,infowindowClick; var marker=new google.maps.marker({ 位置:点,, 地图:地图, 图标:图像, }); var-boxClickText=document.createElement(“div

我有一个createMarker()函数,用于在google地图上放置多个标记。代码如下:

function createMarker(点、客户ID、街道添加、城市、州、邮政编码、地址、电话、网站、公司)
{   
var infowindowHover,infowindowClick;
var marker=new google.maps.marker({
位置:点,,
地图:地图,
图标:图像,
});
var-boxClickText=document.createElement(“div”);
box clicktext.className=“infoBackground”;
var markerMarkup=“”;
markerMarkup=markerMarkup+co+“”;
markerMarkup=markerMarkup+streetadd+“”;
markerMarkup=markerMarkup+city+,“+state+”“+zip+”;
markerMarkup=markerMarkup+phone+“”;
如果(website.indexOf(“http:/”)>0{markerMarkup=markerMarkup+”;
markerMarkup=markerMarkup+“”;
//markerMarkup=markerMarkup+“”;
markerMarkup=markerMarkup+“”;
box clicktext.innerHTML=markerMarkup;
变量myOptions\u单击={
内容:方框ClickText
//,disableAutoPan:是的
,disableAutoPan:false
,最大宽度:0
,pixelOffset:new google.maps.Size(-140,0)
,zIndex:null
,boxStyle:{
//不透明度:0.75
//,宽度:“280px”
余量:“-58px 0px 0px 148px”
}
,closeBoxMargin:“10px 2px 2px 2px”
,closeBoxURL:“http://mansi:2525/pc-新建/images/mapclosebutton.gif“
,infoBoxClearance:newgoogle.maps.Size(1,1)
,isHidden:错
,窗格:“浮动窗格”
,id:“信息窗口单击”
,enableEventPropagation:false
};
var ib=new InfoBox();
google.maps.event.addListener(标记“单击”,函数(e){
ib.close();
ib.setOptions(myOptions\u单击);
ib.open(map,this);
});
返回标记;
}  
我从中引用了类似的问题,并以同样的方式应用了代码,但我没有得到预期的结果


每次创建标记时都会声明一个新的信息框。因此,“ib”指的是为该标记创建的信息框,而不是其他标记

您需要在createMarker函数作用域之外设置infobox变量。然后在事件侦听器内部,关闭旧的infobox,然后创建一个新的infobox

var ib;

function createMarker(<params>) {
     google.maps.event.addListener(marker, "click", function (e) {
        if (typeof ib === 'object') {
            ib.close();
        }
        ib = new Infobox();
        ib.setOptions(myOptions_click);
        ib.open(map, this);
    });
}
var-ib;
函数createMarker(){
google.maps.event.addListener(标记“单击”,函数(e){
if(ib的类型=='object'){
ib.close();
}
ib=新信息框();
ib.setOptions(myOptions\u单击);
ib.open(map,this);
});
}
如果每个标记都需要一个新的信息框,那么可以存储一个信息框数组

var ibs = [];

var closeInfoBox = function() {
    for (var i in ibs) {
        ibs[i].close();
    }
}

function createMarker(<params>) {
    var ibIndex = ibs.push(new Infobox()) - 1,
        ib = ibs[ibIndex];

    google.maps.event.addListener(marker, "click", function (e) {
        closeInfoBox();
        ib.setOptions(myOptions_click);
        ib.open(map, this);
    });

}
var ibs=[];
var closeInfoBox=函数(){
用于(ibs中的var i){
ibs[i].close();
}
}
函数createMarker(){
var ibIndex=ibs.push(new Infobox())-1,
ib=ibs[ibIndex];
google.maps.event.addListener(标记“单击”,函数(e){
closeInfoBox();
ib.setOptions(myOptions\u单击);
ib.open(map,this);
});
}