Javascript 谷歌地图-不知道为什么我总是得到第一个信息窗口

Javascript 谷歌地图-不知道为什么我总是得到第一个信息窗口,javascript,google-maps,Javascript,Google Maps,我有下面的代码,每次单击其中一个标记,我都会看到第一个信息窗口。我有181个信息窗口和181个标记。谢谢你的帮助 var i=0; $.each(in_locations,function(k,v){ console.log(v); var marker_latlng = new google.maps.LatLng(v.latitude, v.longitude); markers[i] = new google.maps.Marker({ position: ma

我有下面的代码,每次单击其中一个标记,我都会看到第一个信息窗口。我有181个信息窗口和181个标记。谢谢你的帮助

var i=0;
$.each(in_locations,function(k,v){
  console.log(v);
  var marker_latlng = new google.maps.LatLng(v.latitude, v.longitude);


   markers[i] = new google.maps.Marker({
     position: marker_latlng,
     map: map, 
     title:"here is my title" + v.id
   });


   infowindows[i] = new google.maps.InfoWindow({
     content: "here is some content string" + v.id,
   });

  google.maps.event.addListener(markers[i], 'click', function() {
    alert('number of infowindows: ' + infowindows.length + ' and value is: ' + i);
    infowindows[i].open(map,markers[i]);
  });
  i++;
});

thx已更新

  • 演示:
  • 解释?您已经在一个循环中
    $。每个
    都不需要增加
    i++
    迭代器

更新

  • 演示:
  • 解释?您已经在一个循环中
    $。每个
    都不需要增加
    i++
    迭代器

警报是否告诉您该值始终为181?您需要将处理程序声明包装在一个闭包中,以使用外部值
i
停止它(一旦循环完成,该值将始终为181)

编辑:因为您使用的是jQuery的$.each函数,它为每个迭代提供了自己的作用域(因为每个迭代都在调用一个函数),所以您还可以通过创建一个局部变量来解决问题,比如j,它获取i的外部值

  var j = i;
  google.maps.event.addListener(markers[i], 'click', function() {
    alert('number of infowindows: ' + infowindows.length + ' and value is: ' + j);
    infowindows[j].open(map,markers[j]);
  });

(这是因为每次迭代都会创建一个新的
j
,而之前您只有1个
i
,因为您在迭代函数之外声明了它。)

警报是否会告诉您该值始终为181?您需要将处理程序声明包装在一个闭包中,以使用外部值
i
停止它(一旦循环完成,该值将始终为181)

编辑:因为您使用的是jQuery的$.each函数,它为每个迭代提供了自己的作用域(因为每个迭代都在调用一个函数),所以您还可以通过创建一个局部变量来解决问题,比如j,它获取i的外部值

  var j = i;
  google.maps.event.addListener(markers[i], 'click', function() {
    alert('number of infowindows: ' + infowindows.length + ' and value is: ' + j);
    infowindows[j].open(map,markers[j]);
  });

(这是因为每次迭代都会创建一个新的
j
,而之前只有1个
i
,因为您在迭代函数之外声明了它。)

出于某种原因,addListener不会对此进行触发。可能还有第二个问题我没有抓住。让我进一步研究一下。thx对于answerthx aSeptik,这肯定有效-选择了其他答案,因为我正在用I变量做其他事情。真的很感激,因为我只是被卡住了。我相信我会有其他的问题,我会很乐意接受的-他们只是非常高兴close@timpone:没问题,我还添加了关闭所有窗口的方法。一定要试试看出于某种原因,addListener没有对此进行激发。可能还有第二个问题我没有抓住。让我进一步研究一下。thx对于answerthx aSeptik,这肯定有效-选择了其他答案,因为我正在用I变量做其他事情。真的很感激,因为我只是被卡住了。我相信我会有其他的问题,我会很乐意接受的-他们只是非常高兴close@timpone:没问题,我还添加了关闭所有窗口的方法。一定要试试看
  var j = i;
  google.maps.event.addListener(markers[i], 'click', function() {
    alert('number of infowindows: ' + infowindows.length + ' and value is: ' + j);
    infowindows[j].open(map,markers[j]);
  });