以下代码循环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"。我试图找出一种方法来鉴别标记,已经被点击以某种方式获得正确的信息,从数据的对象。

我想创建一系列标记在建立循环基于标记的位置,但是这感觉真的效率低下给我。

任何帮助,一如既往,不胜感激。

有帮助吗?

解决方案

单击事件经过地图三个不同的元素。

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

如果用户没有上的覆盖,“覆盖”和“overlaylatlng”点击将是空的。

更新:您必须将监听器添加到,如果你想获得一个GOverlay出来的地图(未标记)。该单击事件的的GMarker 只返回的GLatLng

其他提示

地图上支持一个精事件,其中通过索引的标记其所选择的,请参阅 例如:

看来,上述解决方案只返回标记,不解决我的问题的坐标。也许我做错了什么。

然而,我的方式解决了它是简单地将属性添加到这样的标记物 <击>

<击>
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;
}

<击> 更新:该aboves解决它的一种方式,但更简单的方法是如在注释中提到的事件附加到地图

GEvent.addListener(map, "click", function(marker, point){
    alert(marker);
});

简单馅饼。

    GEvent.addListener(marker, "click", function(o){
            alert(o);
    });
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top