2009-07-03 19 views
1

私は、多数の場所と関連マーカーに関するいくつかのデータを取得し、それらをGoogle Mapsマップに配置するページを持っています。クリックするとそれぞれの小さなメッセージがポップアップするはずです。しかし、それらのどれかをクリックすると、最後に追加された最新のメッセージがポップアップされます。何がありますか?クリックイベントを適切にスクリプト化していませんか?関連するコードは次のとおりです。Google Maps API、すべてのマーカーが同じ情報ウィンドウを開く

var xmlDoc; 
    if (window.XMLHttpRequest) 
    { 
    xmlDoc=new window.XMLHttpRequest(); 
    xmlDoc.open("GET","locs.php",false); 
    xmlDoc.send(""); 
    xmlDoc=xmlDoc.responseXML; 
    } 
    // IE 5 and IE 6 
    else if (ActiveXObject("Microsoft.XMLDOM")) 
    { 
    xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
    xmlDoc.async=false; 
    xmlDoc.load("locs.php"); 
    } 

    var pins = xmlDoc.getElementsByTagName("pin"); 
    //alert(pins); 

    for (i=0;i<pins.length;i++) 
    { 
     //alert(pins[i].getElementsByTagName("lat")[0].childNodes[0].nodeValue); 
     var point = new GLatLng(pins[i].getElementsByTagName("lat")[0].childNodes[0].nodeValue, 
           pins[i].getElementsByTagName("lon")[0].childNodes[0].nodeValue); 
     var colord; 
     var curgender = pins[i].getElementsByTagName("gender")[0].childNodes[0].nodeValue; 
     if(curgender == "Male") 
     {colord = blueOpt;}else if(curgender=="Female"){colord = pinkOpt;}else{colord = purpleOpt;} 

     var marker = new GMarker(point, colord); 
     var mess = pins[i].getElementsByTagName("message")[0].childNodes[0].nodeValue; 

     GEvent.addListener(marker, "click", function() { 
     marker.openInfoWindowHtml(mess); 
     }); 

     map.addOverlay(marker); 

    } 
    } 

答えて

5

ダフが正しいと思います。ただし、openInfoWindowHtml()でリスナーの代わりにbindInfoWindowHtml()を使用することもできます。ただ、このコードを使用してリスナーを置き換える:

marker.bindInfoWindowHtml(mess); 


UPDATEを:を追記として - closureのため、forループで作成されたすべての変数が記憶されます。この問題に対する直接的な解決策は、リスナーを作成するための別の機能を作成することです。

createMarker(marker,mess); 

でリスナーを交換し、機能を追加します。

function createMarker(marker, mess) { 
    GEvent.addListener(marker, "click", function() { 
     marker.openInfoWindowHtml(mess); 
    }); 
} 
+1

は、ありがとう、ありがとう、ありがとう。これはまさに私が必要としたものですが、見つけられませんでした。 – Jake

+0

+1すばらしい答え... – RedBlueThing

0

これも一度もありました。スコープの問題です。私は自分の構造を少し変更しなければならなかったかもしれませんが、おそらくコールバックを変更すると既に助けている可能性があります。

関連する問題