谷歌地图API,所有标记打开相同的infowindow

Jak*_*ake 1 javascript google-maps

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

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

    }
  }
Run Code Online (Sandbox Code Playgroud)

Chr*_*s B 5

Daff对范围是正确的.但是,另一种方法是使用bindInfoWindowHtml()而不是openInfoWindowHtml()的侦听器.只需用以下代码替换侦听器:

marker.bindInfoWindowHtml(mess);
Run Code Online (Sandbox Code Playgroud)


更新: 作为旁注 - 由于闭包,将记住在for循环中创建的任何变量.该问题的直接解决方案是创建一个单独的函数来创建监听器.

用中替换侦听器

createMarker(marker,mess);
Run Code Online (Sandbox Code Playgroud)

并添加功能:

function createMarker(marker, mess) {
    GEvent.addListener(marker, "click", function() {
        marker.openInfoWindowHtml(mess);
    });
}
Run Code Online (Sandbox Code Playgroud)