Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌地图apiv3,每个标记都有相同的点击功能_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

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

Javascript 谷歌地图apiv3,每个标记都有相同的点击功能,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我似乎遇到了一个问题,我看到了很多infobox的实现,但似乎无法理解如何在标记上插入另一段代码。我对javascript非常缺乏经验,所以我似乎无法理解它 当我转到地图时,它会显示所有标记,但只选择数组中最后一段代码 代码: function updateMap() { var map = new google.maps.Map(document.getElementById('map'), { zoom: 4, center: locationarray[0]

我似乎遇到了一个问题,我看到了很多infobox的实现,但似乎无法理解如何在标记上插入另一段代码。我对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]工作正常,因此它没有超出此函数的范围。

尝试类似的操作:

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或任何您想要的变量时,系统将尝试查找具有此名称的最后一个值。因此,如果值更改,结果将是变量的最后一次更新

在这里,当您尝试读取i时,您曾经在for中更新i,因此最后一个值将为99

如果要在侦听器中读取i的值,必须创建一个iLife,并在参数中传递i、contentString和markernumber的实际值

如果你想了解更多关于闭包或IIFE的细节,你必须在文档中找到一些信息,但其中有一段话。这是我能找到的最好的


如果您有问题,请告诉我

谷歌地图apiv3为每个标记提供了相同的单击功能-不,您正在这样做。。。事件处理程序中的i对于每次标记单击将为100。对不起,我以前的帖子有一个错误,但现在它通常是可以的。