2009-07-03 44 views
1

我有一个页面,它可以检索一组位置和一些关于其关联标记的数据,并将它们放在Google Maps地图上。点击时,每个人都应该弹出自己的小信息。但是,单击其中的任何一项都会使最近添加的消息在最近添加的标记上弹出。是什么赋予了?我没有正确编写点击事件脚本吗?这里是相关的代码:Google Maps API,所有标记打开相同的infowindow

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

DAFF是正确的大约范围。但是,一种替代方法是使用bindInfoWindowHtml()而不是使用openInfoWindowHtml()的侦听器。只是这个代码替换听众:

marker.bindInfoWindowHtml(mess); 


UPDATE:一点题外话 - 因为 closure,在创建for循环的变量都会被记住。直接解决这个问题的方法是创建一个独立的函数来创建监听器。

createMarker(marker,mess); 

更换监听器,并添加功能:

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

谢谢你,谢谢你,谢谢你。这正是我所需要的,但无法找到的。 – Jake 2009-07-03 18:54:03

0

我也曾经这样做过。这是一个范围界定问题。我不得不改变我的结构一点点,但也许在你的情况改变的回调可能已经帮助:

GEvent.addListener(marker, "click", function() { 
marker.openInfoWindowHtml(pins[i].getElementsByTagName("message")[0].childNodes[0].nodeValue;); 
}); 
相关问题