infowindows不会打开(Google Maps API v3)

时间:2013-02-12 22:08:54

标签: javascript google-maps-api-3

我非常感谢本论坛的帮助。    所以我即将在地图上带来不同的标记组    使用切换功能,完全正常。

我的eventlisteners打开标记信息窗口。

当我运行以下代码并点击其中一个标记时,    它总是弹出我的数组的最后一个标记的信息窗口。    所以机制有效,但似乎没有迭代了。

我对这个问题考虑了很多,但我没有得出结论。    谢谢你的帮助。

这是代码

 var deutschland = new google.maps.LatLng(51,9);


 function initialize(){

  var mapOptions = { zoom: 6,
                     center: deutschland,
                     streetViewControl: true,
                     scaleControl: true,
                     mapTypeControl: true,
                     mapTypeId: google.maps.MapTypeId.ROADMAP }


 var map = new google.maps.Map(document.getElementById("map-container"),mapOptions);


 lat_data = [

 ['mid',50.0010400,9.0730700,'company1','marker.png','infowindow text 1'],
 ['mid',50.2010057,8.2592738,'company2','marker.png','infowindow text 2'],
 ['West',50.7430120,7.1264100,'company3','marker_green.png','infowindow text 3'], 
  ....

 ];



   markers = [];
   var i, newMarker;

   for (i = 0; i < lat_data.length; i++) {

    var infowindow = new google.maps.InfoWindow({
       content: lat_data[i][5]
   });


var shadow = new google.maps.MarkerImage('http://maps.google.com/mapfiles/shadow.png,
   new google.maps.Size(37,32),
   new google.maps.Point(0,0),
   new google.maps.Point(0,32));

var image = 
new google.maps.MarkerImage('http://maps.google.com/mapfiles/'+lat_data[i][4],
   new google.maps.Size(20,32),
   new google.maps.Point(0,0),
   new google.maps.Point(0,32));

 newMarker = new google.maps.Marker({
   position: new google.maps.LatLng(lat_data[i][1], lat_data[i][2]),
   map: map,
   title: lat_data[i][3],
   icon: image,
   shadow: shadow
 });

 newMarker.category = lat_data[i][0];
 newMarker.setVisible(true);

   google.maps.event.addListener(newMarker,'click',function(){
     infowindow.open(map,newMarker);

  });
  google.maps.event.addListener(map,'click',function(){
      infowindow.close(map,newMarker);
  });

 markers.push(newMarker);
 }

 }

function displayMarkers(category) {
  var i;

 for (i = 0; i < markers.length; i++) {
   if (markers[i].category == category) {
     if (markers[i].getVisible()) {
          markers[i].setVisible(false); }

    else { markers[i].setVisible(true); } } }

1 个答案:

答案 0 :(得分:0)

现在我回答我自己的问题(很酷,我之前从未这样做过!)

根据关于闭包的mozilla.org教程,我编写了以下代码:

 .......
 iw = new google.maps.InfoWindow({
       content: lat_data[i][5]
   });

   function make_open_event_callback(iw){
       return function(){
          iw.open(map,this);
       };
   }
    function make_close_event_callback(iw){
       return function(){
          iw.close(map,this);
       };
   }

   google.maps.event.addListener(newMarker,'click',make_open_event_callback(iw));
  google.maps.event.addListener(map,'click',make_close_event_callback(iw));

 markers.push(newMarker);