5

以下代码循环遍历 json 对象以在谷歌地图上放置标记。哪个工作正常。

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”的最后一个值响应。我一直在试图找出一种方法来识别已单击的标记,以便以某种方式从数据对象中获取正确的信息。

我正在考虑在创建时创建一组标记以根据标记位置循环,但这对我来说效率很低。

任何帮助,一如既往,非常感谢。

4

4 回答 4

5

地图的点击事件传递了三个不同的元素。

GEvent.addListener(map, "click", function(overlay, latlng, overlaylatlng) {
  // overlay = GOverlay or null
  // latlng = GLatLng
  // overlaylatlng = GLatLng or null
});

如果用户没有点击覆盖,'overlay' 和 'overlaylatlng' 将为空。

更新:如果您想从中获得 GOverlay,则必须将侦听器添加到地图(而不是标记)。GMarker的单击事件仅返回 GLatLng。

于 2009-05-13T17:17:26.847 回答
1

Map 支持 onTap 事件,它传递被选中的标记的索引,请参考这个例子:

于 2009-12-21T17:16:50.197 回答
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);
});
于 2009-05-15T12:40:35.943 回答
-2

像馅饼一样简单。

    GEvent.addListener(marker, "click", function(o){
            alert(o);
    });
于 2009-05-13T17:05:32.623 回答