2016-02-03 75 views
1

我遇到一些麻煩,在信息窗口進行動態標記,我就與從parse一些geopoints實現一些數據。每個標記谷歌信息窗口映射

function initMap(arlat, arlon, arname, artel, ardesc, aradd, arithmisi) { 

    var map = new google.maps.Map(document.getElementById('map'), { 
          zoom: 6, 
          center: { 
           lat: 37.58, 
           lng: 23.43 
          } 
         }); 
         var iconBase = 'http://sourtouki.gr/'; 

         for (j = 0; j < arithmisi; j++) { 
          var contentString = '<div id="content">' + 
           '<div id="siteNotice">' + 
           '</div>' + 
           arname[j] + 
           '<div id="bodyContent">' + 
           ardesc[j] + "<br>" + aradd[j] + "<br>" + artel[j] + "<br>" + 
           '</div>' + 
           '</div>'; 


          var marker = new google.maps.Marker({ 
           position: { 
            lat: arlat[j], 
            lng: arlon[j] 
           }, 
           map: map, 
           icon: iconBase + 'sourtoukilogo.png',   
           title: arname[j] 
          });   
         } 
         var infowindow = new google.maps.InfoWindow({ 
          content: contentString 
         }); 

         marker.addListener('click', function() { 
          infowindow.open(map, marker); 
         }); 
        } 

因此,通過上面的代碼,我將一些表中的數據推送到地圖中。標記是在位置上創建的,但是每當我點擊一個標記時,它只打開一個標記。 它加載了17個標記,但唯一打開的infowindow是第一個條目,無論我推送什麼標記。 另外每個標記的標題是正確的。

UPDATE 我有這個地圖上的17項,17 geopoints(緯度,經度),17名,17description等與代碼 所以上面我得到的所有的geoipoints,我把標誌物上的正確位置進入地圖。我希望當我點擊一個標記採取名稱和地址,並出現在infowindow。但我想我在for循環裏有什麼地方錯了。儘管我將所有數據都視爲必需,但每個地點都有正確的名稱等,但每當我點擊一個標記時,只有第一個條目打開infowindow,可以說我點擊地圖中的第三個標記第一個infowindow將打開,如果我按第12個標記也會發生。 任何想法爲什麼會發生這種情況?

更新2

function initMap(arlat, arlon, arname, artel, ardesc, aradd, arithmisi) { 



        // console.log(arlat.length + arlon.lenght); 

        var map = new google.maps.Map(document.getElementById('map'), { 
         zoom: 6, 
         center: { 
          lat: 37.58, 
          lng: 23.43 
         } 
        }); 
        var iconBase = 'http://sourtouki.gr/'; 

        infowindow = new google.maps.InfoWindow(); 
        for (j = 0; j < arithmisi; j++) { 

         var marker = new google.maps.Marker({ 
          position: { 
           lat: arlat[j], 
           lng: arlon[j] 
          }, 
          map: map, 
          icon: iconBase + 'sourtoukilogo.png', 

          title: arname[j] 
         }); 
        var contentString = '<div id="content">' + 
          '<div id="siteNotice">' + 
          '</div>' + 
          arname[j] + 
          '<div id="bodyContent">' + 
          ardesc[j] + "<br>" + aradd[j] + "<br>" + artel[j] + "<br>" + 
          '</div>' + 
          '</div>'; 

          google.maps.event.addListener(marker, 'click', function() { 
            infowindow.setContent(contentString); 
            infowindow.open(map,this); 

           }); 


        } 


       } 

二號更新我做一個空的信息窗口外的for循環後,我裏面打電話的內容,現在它打開所有的信息窗口,但它裏面的內容相同。

Generaly我在計算器嘗試了很多答案在其他問題在這裏,沒有固定工作了我的情況下,如果有人可以幫助我將不勝感激!

+0

抱歉,沒有充分理解你的問題。 「它加載17個標記」是什麼意思?第一個條目中是否有17個標記中的所有數據加載到一個標記中? –

+0

@HermanNz我將編輯我的問題來解釋的更好 –

+0

可能的複製[谷歌地圖JS API V3 - 簡單多個標記示例](http://stackoverflow.com/questions/3059044/google-maps-js-api-v3-簡單的多標記物例如) – geocodezip

回答

2

你的for循環,而不是用於標記和信息窗口和監聽,因爲這些都是關閉的循環試試這個辦法..但最重要的,你需要標記的陣列,而不是單一的標記這樣

var markers = []; 

for (j = 0; j < arithmisi; j++) { 
    var contentString = '<div id="content">' + 
     '<div id="siteNotice">' + 
     '</div>' + 
     arname[j] + 
     '<div id="bodyContent">' + 
     ardesc[j] + "<br>" + aradd[j] + "<br>" + artel[j] + "<br>" + 
     '</div>' + 
     '</div>'; 


    var marker = new google.maps.Marker({ 
     position: { 
      lat: arlat[j], 
      lng: arlon[j] 
     }, 
     map: map, 
     icon: iconBase + 'sourtoukilogo.png',   
     title: arname[j] 
    });   

    k = markers.push(marker); 

    var infowindow = new google.maps.InfoWindow({ 
     content: contentString 
    }); 

    markers[k-1].addListener('click', function() { 
     infowindow.open(map, marker); 
    }); 
} 
+0

我也試過這個,但它仍然是相同的 –

+0

嘗試使用標記數組而不是標記..我已經更新了答案.. – scaisEdge

+0

Yeap這是正確的!現在我得到它們 –

0

您的infowindow的內容正在for循環之外設置。所以它總是會被設置爲contentString的最後一個值。