2014-02-08 52 views
0

它告訴我「遺漏的類型錯誤:無法調用未定義的‘開放’」如何添加谷歌地圖監聽器點擊數組標記內的InfoWindows?

這是我的代碼

var markers = new Array(); 

      for(var i = 0; i < res.length; i = i + 4){ 
       if(res[i] == "") break; 
       shopLatLng = new google.maps.LatLng(res[i + 2], res[i+3]);     

       markers[i] = new google.maps.Marker({ 
        position: shopLatLng, 
        map: map, 
        title: res[i], 
       }); 

       var infoWindows = new Array(); 
       infoWindows[i] = new google.maps.InfoWindow({ 
        content: res[i + 1] 
       }); 


       google.maps.event.addListener(markers[i], 'click', function(){ 
        infoWindows[i].open(map, markers[i]);      
       }); 



       //console.log("Loja: " + res[i]); 
       //console.log("Categoria: " + res[i + 1]);         
       //console.log("Latitude: " + res[i + 2]); 
       //console.log("Longitude: " + res[i + 3]);    
      } 

var這個「資源」是一個字符串數組...

+2

申報信息窗口陣循環外,否則會在每次迭代被覆蓋。 –

+0

感謝您使用@bit的幫助和幫助,我的代碼工作正常! – Caaarlos

回答

1

只是猜測你的變量i沒有得到異步點擊事件的closure'd。

嘗試改變此:

google.maps.event.addListener(markers[i], 'click', function() { 
    infoWindows[i].open(map, markers[i]); 
}); 

這樣:

(function (i) { 
    google.maps.event.addListener(markers[i], 'click', function() { 
     infoWindows[i].open(map, markers[i]); 
    }); 
})(i); 
+0

感謝您使用@ Dr.Molle的幫助和幫助,我的代碼正常工作! – Caaarlos

+0

@caaarlos很高興幫助。 – bits

相關問題