質問

のfollwoingコードのループに渡される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"です。問い合わそうとしていることを識別する方法マーカーとしてクリックするか、正しい知識を身につけましょう情報からのデータオブジェクトです。

んでもらえるように考えてい創造の配列マーカーでの制作ループを通じてのマーカーの位置が感じも非効率です。

のお役に立てるよう、常にぞよろしくお願い申し上げます。

役に立ちましたか?

解決

マップのクリックイベント 3 つの異なる要素を渡します。

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

ユーザーがオーバーレイをクリックしなかった場合、「overlay」と「overlaylatlng」は null になります。

アップデート: GOverlay を取得したい場合は、マップ (マーカーではなく) にリスナーを追加する必要があります。の GMarker のクリック イベント GLatLng のみを返します。

他のヒント

地図を支援するonTapイベントのパスのインデックスマーカーを選択し、を参照ください この 例:

上記の解決策はマーカーの座標のみを返すようですが、これでは私の問題は解決されません。おそらく私は何か間違ったことをしているのでしょう。

ただし、私がそれを解決した方法は、このようにマーカーにプロパティを追加することでした

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

パイのようにシンプルます。

    GEvent.addListener(marker, "click", function(o){
            alert(o);
    });
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top