2011-05-03 130 views
24

我想添加infoWindow到Google Map上的多个标记。我来的最接近的是获得一个infoWindow来显示你可以在数组中看到的所有标记的最后一个地址。我粘贴下面的代码不起作用,我得到一个“Uncaught TypeError:无法读取未定义的属性'4'。我敢肯定这是一个范围问题,但我在这里绕圈,可以做一些帮助:标记内容(infoWindow)谷歌地图

var hotels = [ 
      ['ibis Birmingham Airport', 52.452656, -1.730548, 4, 'Ambassador Road<br />Bickenhill<br />Solihull<br />Birmingham<br />B26 3AW','(+44)1217805800','(+44)1217805810','[email protected]','http://www.booknowaddress.com'], 
      ['ETAP Birmingham Airport', 52.452527, -1.731644, 3, 'Ambassador Road<br />Bickenhill<br />Solihull<br />Birmingham<br />B26 3QL','(+44)1217805858','(+44)1217805860','[email protected]','http://www.booknowaddress.com'], 
      ['ibis Birmingham City Centre', 52.475162, -1.897208, 2, 'Ladywell Walk<br />Birmingham<br />B5 4ST','(+44)1216226010','(+44)1216226020','[email protected]','http://www.booknowaddress.com'] 
     ]; 

     for (var i = 0; i < hotels.length; i++) { 
      var marker = new google.maps.Marker({ 
       position: new google.maps.LatLng(hotels[i][1], hotels[i][2]), 
       map: map, 
       icon: image, 
       title: hotels[i][0], 
       zIndex: hotels[i][2] 
      }); 

      var infoWindow = new google.maps.InfoWindow(); 

      google.maps.event.addListener(marker, 'click', function() { 
       var markerContent = hotels[i][4]; 
       infoWindow.setContent(markerContent); 
       infoWindow.open(map, this); 
      }); 
     } 

感谢预期。

回答

42

我们已经解决了这个问题,虽然我们没有想到在for之外添加addListener会产生任何效果。这里的答案:

创建它与您的信息的信息窗口新功能:

function addInfoWindow(marker, message) { 

      var infoWindow = new google.maps.InfoWindow({ 
       content: message 
      }); 

      google.maps.event.addListener(marker, 'click', function() { 
       infoWindow.open(map, marker); 
      }); 
     } 

然后打电话给你想创建数组ID的功能和标记:

addInfoWindow(marker, hotels[i][3]); 
+2

我经历了很多,所以这个问题的答案的变种看着。你的答案是最清楚的。谢谢。 – ZMorek 2011-08-30 19:25:29

+0

@DarrylGodden ...谢谢你的关于infowindow的信息。 – 2013-04-05 09:58:05

+4

什么是info变量? – 2013-06-27 11:58:44

28

尽管这个问题已经得到解答,但我认为这种方法更好: http://jsfiddle.net/kjy112/3CvaD/摘自StackOverFlow上的这个问题google maps - open marker infowindow given the coordinates

每个标记得到一个“信息窗口”条目:

function createMarker(lat, lon, html) { 
    var newmarker = new google.maps.Marker({ 
     position: new google.maps.LatLng(lat, lon), 
     map: map, 
     title: html 
    }); 

    newmarker['infowindow'] = new google.maps.InfoWindow({ 
      content: html 
     }); 

    google.maps.event.addListener(newmarker, 'mouseover', function() { 
     this['infowindow'].open(map, this); 
    }); 
} 
+0

+1这个作品很好!你不能用infowindow的自定义属性初始化它,但显然你可以创建'infowindow'键......很高兴它可以工作。谢谢! – 2016-05-06 06:29:45

+0

最好的回答:) – 707 2016-09-15 18:52:24