谷歌地图 - 自定义JS输出infowindows和标记问题

时间:2011-08-08 13:20:08

标签: javascript google-maps

尝试简化我的Google地图自定义代码以放置标记和信息气泡。但是遇到了一些我似乎无法调试代码的问题如下,它目前没有输出任何内容。代码定义lat / long / title和content,然后尝试将它们作为标记输出到地图上。

  <script type="text/javascript">

   function initialize() {
    var myLatlng = new google.maps.LatLng(20,0);
    var myOptions = {
      zoom: 2,
      center: myLatlng,
      mapTypeId: google.maps.MapTypeId.TERRAIN
  }

  var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

var countries = [
  {title:'Afghanistan', lat:34.28, lon:69.11, content:"<h2>Afghanistan</h2><p>16 Alumni</p>"},
  {title:'Albania', lat:41.18, lon:19.49, content:"<h2>Albania</h2><p>7 Alumni</p>"},
  {title:'Angola', lat:-8.5, lon:13.15, content:"<h2>Angola</h2><p>9 Alumni</p>"},
  {title:'Antarctica', lat:-80, lon:0, content:"<h2>Antarctica</h2><p>1 Alumnus</p>"},
  {title:'Antigua & Barbuda', lat:17.20, lon:-61.48, content:"<h2>Antigua & Barbuda</h2><p>1 Alumnus</p>"},
  {title:'Argentina', lat:-36.30, lon:-60, content:"<h2>Argentina</h2><p>29 Alumni</p>"},
];

for (i=0;i<countries.length;i++)
{
  c = countries[i];
  marker: new google.maps.Marker({position: new google.maps.LatLng(" + c['lat'] + "," + c['lon'] + "), map: map, title: '" + c['title'] + "'}),
  infowindow: new google.maps.InfoWindow({content: '" + c['content'] + "'});
}

var item;
for (var i=0; i<countries.length; i++) {
    item = countries[i];
    google.maps.event.addListener(item.marker, 'click', makeCallback(item));
}

function makeCallback(country) {
    return function () {
        country.infowindow.open(map, country.marker);
    };
}

}

</script>

1 个答案:

答案 0 :(得分:0)

代码中存在各种印刷和语法错误。此外,不需要在变量的位置构造字符串。以下是工作版本:

...
var countries = [...];

for (var i = 0; i < countries.length; i++) { 
    var c = countries[i]; 
    c.marker = new google.maps.Marker({
        position: new google.maps.LatLng(c.lat, c.lon), 
        map: map, 
        title: c.title});
    c.infowindow = new google.maps.InfoWindow({content: c.content}); 

    google.maps.event.addListener(c.marker, 'click', makeCallback(c)); 
} 

function makeCallback(country) { 
    return function () { 
        country.infowindow.open(map, country.marker); 
    }; 
}