试图将多个信息窗口绑定到Google地图上的多个标记,但失败

我的项目使用一个JSON提要来获取指定纬度和经度边界内地震的信息,基本上是制作一个框。我把这些信息转化成谷歌地图上的标记。我需要每个标记也显示一些附加信息,因此我尝试使用内置的InfoWindow对象,这样当您单击标记时,您可以打开工具提示,其中包含一些与该标记相关的信息。然而,我发现无论我点击什么标记,同一个信息窗口总是出现在该组的同一标记之上,我相信它总是我循环中创建的最后一个信息窗口。这是密码

$.getJSON(url,函数(json){
对于(var i=0;i<json.sequences.length;i++)
{
var pos=new google.maps.LatLng(json.sequences[i].lat,json.sequences[i].lng);
var info=json.sequences[i].lat+“,”+json.sequences[i].lng;
var marker=new google.maps.marker({
地图:地图,
职位:pos,,
标题:json.sequences[i].eqid
})
var tooltip=new google.maps.InfoWindow({
内容:信息
})
google.maps.event.addListener(标记'click',函数(){
工具提示:打开(地图、标记);
});
标记器。推(标记器);
工具提示。推送(工具提示);
}               
});

标记是地图上所有标记对象的数组,工具提示是存储infowindows对象的另一个数组。它们是全球性的

这是谷歌地图标签中一个非常常见的问题,也是一个很容易犯的错误:)

发生的情况是,正在异步调用click事件,它正在获取getJSON回调中标记变量(列表中的最后一个)中的当前值

您需要将addListener调用包装到函数中,以便围绕click回调中使用的标记变量创建闭包:

函数listenMarker(标记器)
{
//因此,标记与为listenMarker函数调用创建的闭包相关联
google.maps.event.addListener(标记’click’,函数(){
工具提示:打开(地图、标记);
});
}

然后从主getJSON回调调用listenMarker(当前正在调用addListener)

发表评论