2017-09-11 53 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

謝謝你,先生,爲我工作 –