以下代码循环遍历json对象以在google地图上放置标记。哪个工作正常。
function displayMarkers(data){
for(var i = 0; i < data.Lat.length; i++){
var point = new GLatLng(data.Lat[i],data.Lng[i]);
marker = new GMarker(point);
map.addOverlay(marker);
// here's the problem
GEvent.addListener(marker, "click", function(){
alert(data.Name[i]);
});
}
}
问题是,每个标记总是以“i”的最后一个值响应。我一直试图找出一种方法来识别已被点击的标记,以某种方式从数据对象中获取正确的信息。
我正在考虑在创建时创建一个标记数组,以根据标记位置进行循环,但这对我来说效果真的很低。
任何帮助,一如既往,非常感谢。
答案 0 :(得分:5)
click event for the map传递了三个不同的元素。
GEvent.addListener(map, "click", function(overlay, latlng, overlaylatlng) {
// overlay = GOverlay or null
// latlng = GLatLng
// overlaylatlng = GLatLng or null
});
如果用户没有点击叠加层,则'overlay'和'overlaylatlng'将为空。
更新:如果要从中获取GOverlay,则必须将侦听器添加到地图(而不是标记)。 click event for a GMarker仅返回GLatLng。
答案 1 :(得分:1)
Map支持onTap事件,该事件传递所选标记的索引,请参阅this示例:
答案 2 :(得分:0)
以上解决方案似乎只返回标记的坐标,这并不能解决我的问题。也许我做错了什么。
然而,我解决它的方法是简单地将标识添加到标记中 <击> 撞击>
<击>function createMarker(latlng,name) {
var marker = new GMarker(latlng);
// HERE WE GO
marker.value = name;
GEvent.addListener(marker,"click", function() {
addToList(this.value);
});
return marker;
}
击> <击> 撞击> 更新:以上解决方法是一种方式,但更简单的方法是将事件附加到地图中,如评论中所述
GEvent.addListener(map, "click", function(marker, point){
alert(marker);
});
答案 3 :(得分:-2)
简单如馅饼。
GEvent.addListener(marker, "click", function(o){
alert(o);
});