【发布时间】:2011-01-22 08:59:15
【问题描述】:
我的项目使用 JSON 提要来获取指定纬度和经度边界内的地震信息,本质上是制作一个盒子。我获取这些信息并将所有结果转换为谷歌地图上的标记。我需要每个标记还显示一些附加信息,因此我尝试使用内置的 InfoWindow 对象,这样当您单击标记时,您会打开带有与该标记相关联的一些信息的工具提示。但是我发现无论我点击什么标记,相同的信息窗口总是出现在该组的相同标记上方,我相信它总是在我的循环中创建的最后一个信息窗口。这是代码。
$.getJSON(url, function(json) {
for(var i = 0; i < json.earthquakes.length; i++)
{
var pos = new google.maps.LatLng(json.earthquakes[i].lat, json.earthquakes[i].lng);
var info = json.earthquakes[i].lat + ", " + json.earthquakes[i].lng;
var marker = new google.maps.Marker({
map: map,
position: pos,
title: json.earthquakes[i].eqid
})
var tooltip = new google.maps.InfoWindow({
content: info
})
google.maps.event.addListener(marker, 'click', function() {
tooltip.open(map, marker);
});
markers.push(marker);
tooltips.push(tooltip);
}
});
markers 是地图上所有标记对象的数组,tooltips 是另一个用于存储 infowindows 对象的数组。它们是全球性的。
【问题讨论】:
-
这是由于闭包的工作方式(标记通过对闭包的引用传递,您想要的是副本)。但是当调用监听器时,
this会引用添加监听器的对象(标记),所以你可以使用this而不是marker。
标签: javascript ajax json google-maps