有没有办法确定点击了哪个Google地图标记?

时间:2009-05-13 16:52:18

标签: javascript google-maps google-maps-markers

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

我正在考虑在创建时创建一个标记数组,以根据标记位置进行循环,但这对我来说效果真的很低。

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

4 个答案:

答案 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);
    });