我收到了错误" 无法读取属性'打开'未定义的"在尝试在Google Maps API中打开InfoWindow时。但是当我在' marker [i] .addListener '之外调用 infoWindows [i] .setMap(map)时一切正常。这是我的代码
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]);
});
}
}
答案 0 :(得分:0)
这是一个范围关闭问题 - 你可以通过调用一个函数来修复它,使i
保持不变,但你应该稍微阅读它。
marker[i].addListener('click', function (val) {
return function () {
infoWindows[val].open(map, marker[val]);
};
}(i));