Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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 谷歌地图覆盖不会定位在正确的标记上_Javascript_Google Maps_Google Maps Api 3 - Fatal编程技术网

Javascript 谷歌地图覆盖不会定位在正确的标记上

Javascript 谷歌地图覆盖不会定位在正确的标记上,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我正试图制作一个标记列表以固定在地图上,每个标记都有自己的覆盖。它大部分是工作的,但是覆盖层都被放置在彼此的顶部,而不是其相应的标记 代码如下: var myCenter = getMyLocation(); function initialize() { var mapProp = { center: myCenter, zoom:9, mapTypeId:google.maps.MapTypeId.ROADMAP }; var map = new go

我正试图制作一个标记列表以固定在地图上,每个标记都有自己的覆盖。它大部分是工作的,但是覆盖层都被放置在彼此的顶部,而不是其相应的标记

代码如下:

var myCenter = getMyLocation();

function initialize()
{
  var mapProp = {
    center: myCenter,
    zoom:9,
    mapTypeId:google.maps.MapTypeId.ROADMAP
  };

  var map = new google.maps.Map(document.getElementById("googleMap"),mapProp);

  var locations = [
    {lat: -27.646670, lng: 152.86918630, text: 'Address #1'},
    {lat: -27.6446550, lng: 152.7822390, text: 'Address #2'},
    {lat: -27.6062480, lng: 152.7889550, text: 'Address #3'}
  ];

  // Loop through our list and plot them on the map
  locations.forEach(function (l) {

    marker =  new google.maps.Marker({
      position: new google.maps.LatLng(l.lat, l.lng),
    });

    marker.setMap(map);

    // Create our infoWindow panel for our marker
    var infoWindow = new google.maps.InfoWindow({
      content: l.text
    });

    // Bind click event for our marker
    google.maps.event.addListener(marker, 'click', function () {
      infoWindow.open(map, marker);
    });
  });

}

google.maps.event.addDomListener(window, 'load', initialize);

我有一种感觉,这个问题与点击添加监听器事件有关,也许闭包会对您有所帮助?标记是一个对象,因为它在指向它的每个循环链接上都会发生更改。关闭将阻止它

google.maps.event.addListener(marker, 'click', (function(marker){ return function () {
      infoWindow.open(map, marker);
};})(marker));

您只是缺少一个
var

marker =  new google.maps.Marker(...
应该是:

var marker =  new google.maps.Marker(
因此,您只有一个全局
标记
变量,而不是每个标记应有的唯一变量


由于您将
.forEach
与回调函数一起使用,因此该回调函数为循环的每次迭代提供一个闭包。因此,您只需利用这个闭包,将
marker
设置为回调中的局部变量。

这样可以工作,但实际上不需要额外的代码。由于
.forEach()
回调,代码已经有一个闭包。所需的只是添加缺少的
var
,以便
marker
成为现有closure.Champion的一部分。真不敢相信我居然没看到。谢谢