Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.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/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
Javascript 向google地图标记数组添加事件侦听器失败_Javascript_Google Maps - Fatal编程技术网

Javascript 向google地图标记数组添加事件侦听器失败

Javascript 向google地图标记数组添加事件侦听器失败,javascript,google-maps,Javascript,Google Maps,我正在使用谷歌地图的信息窗口功能添加信息框,当我点击地图上的任何标记时,信息框就会弹出 我的问题是:没有将事件侦听器正确添加到标记中。所有标记都会加载,但当我单击任何标记时,只会弹出最后一个信息窗口 var markers = []; var infoWindows =[]; for(var x in data.results) { var result = data.results[x] var contentString = generateContentSt

我正在使用谷歌地图的信息窗口功能添加信息框,当我点击地图上的任何标记时,信息框就会弹出

我的问题是:没有将事件侦听器正确添加到标记中。所有标记都会加载,但当我单击任何标记时,只会弹出最后一个信息窗口

var markers = [];
var infoWindows =[];
for(var x in data.results)
{
        var result = data.results[x]
        var contentString = generateContentString(result);
        var latLng = new google.maps.LatLng(result.coordinates.latitude,result.coordinates.longitude);

        infoWindows[x] = new google.maps.InfoWindow({
            content: contentString
        });
        markers[x] = new google.maps.Marker({
            position: latLng,
            map: map,
            title: result.location
        });
        markers[x].addListener('click', function() {
            infoWindows[x].open(map, markers[x]);
        });
}

标记
存储标记对象,
信息窗口
存储信息窗口对象。

您可以使用clousure,以便在适当的侦听器中保留每次迭代的值

  var markers = [];
  var infoWindows =[];

  //  add the clousure 
  var addListenersOnMarker = function(actMarker, actInfoWindow) {
      google.maps.event.addListener(actMarker, 'click', function() {
          actInfoWindow.open(map,actMarker);
      }
    }

  for(var x in data.results)
  {
          var result = data.results[x]
          var contentString = generateContentString(result);
          var latLng = new google.maps.LatLng(result.coordinates.latitude,result.coordinates.longitude);

          infoWindows[x] = new google.maps.InfoWindow({
              content: contentString
          });
          markers[x] = new google.maps.Marker({
              position: latLng,
              map: map,
              title: result.location
          });

          // call the function  
          addListenersOnMarker(markers[x], infoWindows[x] );

  }

您可以将回调参数写入回调上下文,但这不是最好的方法

或者你只是用闭包

var标记=[];
var infoWindows=[];
对于(data.results中的VarI)(函数(x){
var结果=数据。结果[x]
var contentString=generateContentString(结果);
var latLng=new google.maps.latLng(result.coordinates.latitude,result.coordinates.longitude);
infoWindows[x]=新的google.maps.InfoWindow({
内容:contentString
});
markers[x]=新的google.maps.Marker({
位置:latLng,
地图:地图,
标题:result.location
});
标记[x].addListener('click',函数(){
信息窗口[x]。打开(地图,标记[x]);
});
})(i) )