Javascript 谷歌地图信息窗口出现在一个角落

Javascript 谷歌地图信息窗口出现在一个角落,javascript,ruby-on-rails,ruby,google-maps,Javascript,Ruby On Rails,Ruby,Google Maps,这是我的html代码,用于生成marker和infowindow(使用RubyonRails) var标记=[] 函数initMap(){ var latLng1=新的google.maps.LatLng(1.352083103.819836); 变量myOptions={ 缩放:12, 中心:latLng1, mapTypeId:google.maps.mapTypeId.ROADMAP } map=new google.maps.map(document.getElementById('ma

这是我的html代码,用于生成marker和infowindow(使用RubyonRails)

var标记=[]
函数initMap(){
var latLng1=新的google.maps.LatLng(1.352083103.819836);
变量myOptions={
缩放:12,
中心:latLng1,
mapTypeId:google.maps.mapTypeId.ROADMAP
}
map=new google.maps.map(document.getElementById('map\u canvas'),myOptions);

对于(i=0;i问题在于您的
MarkerWithLabel
库。Infowindow从marker获取位置。尝试使用此链接。它包含您想要实现的所有内容。它不起作用,然后您还可以使用
setPosition()为Infowindow设置位置
函数只需传递用于创建标记的latlng,即可完成。

for循环中声明的函数的每个实例共享包含值
i
的相同闭包,因此所有addListener调用基本上都在调用
iw.open(映射,未定义)
因为
i
将在迭代结束时离开数组的末尾


有关此问题的示例解决方案,以及JavaScript中闭包的更多信息,请参阅。

我不建议使用new gem将数据从ruby传递到js…您可以通过多种方式简单地完成此操作…您的代码看起来不错,但我无法说明gon
如何处理您的js脚本。请查看类似的问题我用动态
标记和
信息窗口
实现了相同的动态
映射
。这段代码非常有效


谢谢~您的链接已满帮助,但我的信息窗口语法与此链接相同,并且infowinds对于单个标记器工作正常。所以我认为是内部问题吗?
 var marker=[]
   function initMap() {

     var latLng1 = new google.maps.LatLng(1.352083, 103.819836);
     var myOptions = {
         zoom: 12,
         center: latLng1,
         mapTypeId: google.maps.MapTypeId.ROADMAP
     }
      map = new google.maps.Map(document.getElementById('map_canvas'), myOptions);

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


      var latLng = new google.maps.LatLng(gon.astatic[i][1], gon.astatic[i][2]);
       if(i<2){
       marker[i] = new MarkerWithLabel({position: latLng, map: map,icon:"/assets/green_MarkerV.png" ,labelClass: "labels",labelContent: gon.astatic[i][3]});}
       else
       {
      marker[i] = new MarkerWithLabel({position: latLng, map: map,icon:"/assets/green_MarkerN.png" ,labelClass: "labels",labelContent: gon.astatic[i][3]});
       }


     var iw =new google.maps.InfoWindow({content: 'HI' });
     google.maps.event.addListener(marker[i],"mouseover",function(e){iw.open(map,marker[i]);})

     }