Javascript 谷歌地图信息窗口仅显示第一个信息窗口,即使是其他标记

Javascript 谷歌地图信息窗口仅显示第一个信息窗口,即使是其他标记,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我见过其他与此相关的问题,我看到的解决方案似乎都没有帮助。也许我只是忽略了什么 任何帮助都将不胜感激 我有一张地图,上面有1000个标记。当用户在标记上执行鼠标悬停时,我需要显示标记所在位置的信息窗口 我遇到的问题是,无论我将鼠标移到哪个标记上,同一个信息窗口都会出现在同一个标记上 我在下面提供了一个屏幕截图,显示了带有标记的地图和一个信息窗口。因此,无论我将鼠标移到哪个标记上,都会显示相同的信息窗口 这是代码(gm是一个实例化的google.maps对象): for(变量i=0;i9) { d

我见过其他与此相关的问题,我看到的解决方案似乎都没有帮助。也许我只是忽略了什么

任何帮助都将不胜感激

我有一张地图,上面有1000个标记。当用户在标记上执行鼠标悬停时,我需要显示标记所在位置的信息窗口

我遇到的问题是,无论我将鼠标移到哪个标记上,同一个信息窗口都会出现在同一个标记上

我在下面提供了一个屏幕截图,显示了带有标记的地图和一个信息窗口。因此,无论我将鼠标移到哪个标记上,都会显示相同的信息窗口

这是代码(gm是一个实例化的google.maps对象):

for(变量i=0;i9)
{
datum.map_pin_icon=datum.map_pin_loc+'dot1.svg';
icon=new gm.MarkerImage(datum.map_pin_图标,null,null,null,new google.maps.Size(8,8));
zi=450;
}
var标记=新的通用标记({
位置:loc,
/**标题:datum.title!=''?datum.title:datum.description**/
图标:图标,
zIndex:zi,
地图:地图
});
marker.type='point';
marker.post_id=datum.pin_id;
marker.scrollAndAnimate=true;
/**(这些在我的代码的其他地方用于标记管理和其他目的)**/
标记器。推(标记器);
markersLatLngObjs.push(loc);
var infowindow=新的gm.infowindow({
内容:“”+(datum.title!=”?datum.title:datum.description)+“”
});
addListener(标记'mouseover',函数(){
信息窗口。打开(地图、标记);
});
}

pb是指mouseover事件处理程序是引用变量的闭包,这些变量在调用函数的上下文中是唯一的。最好将这部分移到环外,以便看得更清楚

例如,您可以定义一个函数,例如:

函数showInfo(){
//在标记的上下文中调用
var数据=选择位置数据[this.placeIndex];
var infowindow=新的gm.infowindow({
内容:“”+(datum.title!=”?datum.title:datum.description)+“”
});
打开(地图,这个);
}

在循环之前,用循环中的属性
placeIndex
(例如)标记标记:

marker.placeIndex=i

最后,将处理程序绑定到:

gm.event.addListener(标记'mouseover',showInfo)


编辑:哎呀,我的糟糕,忘记了其他参考资料,同样的pb。您可能可以在处理程序中用“this”替换标记。我更新了代码。

可能是重复的谢谢。但是为什么是-1呢?我搜索了一下,没有发现那个问题。我也对此进行了研究,并尝试了多种解决方案,但都无济于事。那么a-1代表努力?来吧
for (var i = 0; i < opts.LocationsData.length; i ++) {
    var datum = opts.LocationsData[i];
    var icon = new gm.MarkerImage(datum.map_pin_loc + datum.map_marker + '.svg',null, null, null, new google.maps.Size(31,51));
    var loc = new gm.LatLng(datum.latitude, datum.longitude);
    var zi = 500;
    if(i>9)
    {
        datum.map_pin_icon = datum.map_pin_loc + 'dot1.svg';
        icon = new gm.MarkerImage(datum.map_pin_icon,null, null, null, new google.maps.Size(8,8));
        zi=450;
    }

    var marker = new gm.Marker({
        position: loc,
        /** title: datum.title != '' ? datum.title : datum.description, **/
        icon: icon,
        zIndex: zi,
        map: map
    });
    marker.type = 'point';
    marker.post_id = datum.pin_id;
    marker.scrollAndAnimate = true;

    /** (these are used elsewhere in my code for marker management and other purposes) **/
    markers.push(marker);
    markersLatLngObjs.push(loc);

    var infowindow = new gm.InfoWindow({
        content: '<strong>' + (datum.title != '' ? datum.title : datum.description) + '</strong>'
    });
    gm.event.addListener(marker, 'mouseover', function() {
        infowindow.open(map,marker);
    });
}