2014-02-08 54 views
0

它告诉我“遗漏的类型错误:无法调用未定义的‘开放’”如何添加谷歌地图监听器点击数组标记内的InfoWindows?

这是我的代码

var markers = new Array(); 

      for(var i = 0; i < res.length; i = i + 4){ 
       if(res[i] == "") break; 
       shopLatLng = new google.maps.LatLng(res[i + 2], res[i+3]);     

       markers[i] = new google.maps.Marker({ 
        position: shopLatLng, 
        map: map, 
        title: res[i], 
       }); 

       var infoWindows = new Array(); 
       infoWindows[i] = new google.maps.InfoWindow({ 
        content: res[i + 1] 
       }); 


       google.maps.event.addListener(markers[i], 'click', function(){ 
        infoWindows[i].open(map, markers[i]);      
       }); 



       //console.log("Loja: " + res[i]); 
       //console.log("Categoria: " + res[i + 1]);         
       //console.log("Latitude: " + res[i + 2]); 
       //console.log("Longitude: " + res[i + 3]);    
      } 

var这个“资源”是一个字符串数组...

+2

申报信息窗口阵循环外,否则会在每次迭代被覆盖。 –

+0

感谢您使用@bit的帮助和帮助,我的代码工作正常! – Caaarlos

回答

1

只是猜测你的变量i没有得到异步点击事件的closure'd。

尝试改变此:

google.maps.event.addListener(markers[i], 'click', function() { 
    infoWindows[i].open(map, markers[i]); 
}); 

这样:

(function (i) { 
    google.maps.event.addListener(markers[i], 'click', function() { 
     infoWindows[i].open(map, markers[i]); 
    }); 
})(i); 
+0

感谢您使用@ Dr.Molle的帮助和帮助,我的代码正常工作! – Caaarlos

+0

@caaarlos很高兴帮助。 – bits

相关问题