2017-09-11 37 views
-1

我收到一个错误“尝试在Google Maps API中打开InfoWindow时无法读取未定义的”属性打开“。但是,当我打电话给infoWindows [i] .setMap(地图)以外'标记[i] .addListener'一切都没问题。这里是我的代码当打开InfoWindow(谷歌地图API)时出错

var devices = new Array(); 
var marker = new Array(); 
var infoWindows = new Array(); 
devices = <?= json_encode($devices); ?> 
function initMap() { 
    map = new google.maps.Map(document.getElementById('map_canvas'), { 
     center: {lat: 49.062415, lng: 31.704558}, 
     zoom: 6, 
    }); 
    initMarkers(); 
} 

function initMarkers(){ 
    for(var i=0; i< devices.length; i++){ 
     marker[i] = new google.maps.Marker({ 
      position: {lat: parseFloat(devices[i]['lat']), lng: 
       parseFloat(devices[i]['lon']) 
      }, 
      map: map, 
      icon: mIcon, 
     }); 
     infoWindows[i] = new google.maps.InfoWindow({content: devices[i]['infoData']}); 
     marker[i].setMap(map); 
     marker[i].addListener('click', function() { 
      infoWindows[i].open(map, marker[i]); 
     }); 
    } 
} 
+1

范围关闭问题 - 您在'marker [i]中使用的'i''并不是指您希望它做了什么。 –

回答

0

这是一个范围封问题 - 你可以通过调用使i保持相同的功能修复它,但你应该阅读它有点太。

marker[i].addListener('click', function (val) { 
    return function() { 
     infoWindows[val].open(map, marker[val]); 
    }; 
}(i)); 
+0

谢谢你,先生,为我工作 –