2009-05-13 18 views
4

次のコードはjsonオブジェクトをループして、Googleマップにマーカーを配置します。どちらがうまくいくの?どの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

click event for the mapは、3つの異なる要素を渡します。

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

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

更新: GOverlayを取得するには、リスナーをマップ(マーカーではない)に追加する必要があります。 click event for a GMarkerはGLatLngを返します。

-2

シンプルなパイ。

GEvent.addListener(marker, "click", function(o){ 
      alert(o); 
    }); 
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; 
} 

UPDATEなどのマーカーにプロパティを追加することでした解決方法:abovesはそれを一つの方法を解決するが、簡単な方法で結合することですコメントで述べたようなマップにイベント

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

ああ、あなたはまったく正しいです。問題は、マップではなくリスナーをマーカーに追加することです。リスナーをマップに追加すると、期待通りに機能し、リスナーを一度追加するだけで済みます。 –

+0

すごく、ありがとう。 – gargantuan

1

地図はマルケのインデックスを渡しONTAPイベントをサポートしています選択されたrは、thisを参照してください。例:

関連する問題