谷歌地图apiv3,每个标记具有相同的点击功能

时间:2017-10-19 10:15:51

标签: javascript google-maps google-maps-api-3

我似乎遇到了一个问题,我看到了很多信息框的实现,但似乎无法弄清楚如何在标记上插入另一段代码。我对javascript很缺乏经验,所以我似乎无法弄明白。

当我去地图时,它会显示所有标记,但只选择数组中最后一段代码,

代码:

    function updateMap() {
  var map = new google.maps.Map(document.getElementById('map'), {
    zoom: 4,
    center: locationarray[0]
  });
  var markernumber = new Array();
  for (var i = 0; i < 99; i++) {
    markernumber[i] = new google.maps.Marker({
      position: locationarray[i],
      map: map
    });
    console.log('in loop:' + i);
    google.maps.event.addListener(markernumber[i], 'click', function() {
      console.log('in click:' + i);
      openInNewTab(contentString[i]);
    });
  }
  document.getElementById('loader').style = "opacity: 0;";
}

contentstring [i]工作正常,所以除了这个功能之外没什么。

1 个答案:

答案 0 :(得分:-1)

尝试类似的东西:

var markernumber = new Array();
    for (var i = 0; i < 4; i++) {
        markernumber[i] = new google.maps.Marker({
            position: position[i],
            map: map
        });
        console.log('in loop:' + i);
        (function (i, content, marker) {

            google.maps.event.addListener(marker, 'click', function (e) {
                console.log('in click:' + i);
                //console.log(e);
            });

        })(i, contentString[i], markernumber[i]);
    }

你有一个关闭错误。这意味着当执行侦听器时,i值已经更改(进入for)并且传递到99.

以订单方式解释。当您调用i或您想要的变量时,系统将尝试使用此名称查找最后一个值。因此,如果值发生变化,结果将是最后一次更新&#34;变量。

在这里,当您尝试阅读i时,您已经&#34;更新&#34; ifor,因此最后一个值为99。

如果要在侦听器中读取i的值,则必须创建IIFE并将参数传递给icontentString和{{1}的实际值}}

如果你想了解关于闭包的更多细节或documentation关于IIFE的更多细节,请咨询here(你必须在文档中找到一点但是有一段经文。这是最好的和可以找到)。

如果您有疑问,请告诉我