2011-03-17 61 views
1

我有幾個谷歌地圖標記,我試圖給每個添加一個點擊事件,但由於某種原因,顯示的文本對每個標記都是一樣的:(使用谷歌地圖的JavaScript中的範圍和關閉問題

我認爲這是一個問題,我的JS閉包(都是閉包同樣的事情,在JS範圍是什麼?)

與那裏的問題是發生標記的地圖是在這裏: http://www.comehike.com/outdoors/parks/trailhead.php

我是什麼在我所擁有的代碼中做錯了,這會讓每個標記出現相同的彈出窗口?

謝謝, 亞歷克斯

回答

1

這裏是一個JSFiddle Demo

我創建了附加信息命名標誌的虛擬陣列。然後,我們創建一個全局變量infowindow來保存信息窗口的一個實例。此信息窗口將在點擊標記旁邊彈出。

var map; 
var global_markers = [];  
var markers = [[37.09024, -95.712891, 'trialhead0'], [-14.235004, -51.92528, 'trialhead1'], [-38.416097, -63.616672, 'trialhead2']]; 

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

在您的標記填充for循環。基本上,我不是用每個標記持有一個infowindow的實例,而是使用它附加內容,並在單擊標記時使用onclick事件,我將infowindow的內容與我們保存的內容一起設置,然後打開點擊旁邊的infowindow標記:

for (var i = 0; i < markers.length; i++) { 
     // obtain the attribues of each marker 
     var lat = parseFloat(markers[i][0]); 
     var lng = parseFloat(markers[i][1]); 
     var trailhead_name = markers[i][2]; 

     var myLatlng = new google.maps.LatLng(lat, lng); 

     var contentString = "<html><body><div><p><h2>" + trailhead_name + "</h2></p></div></body></html>"; 

     var marker = new google.maps.Marker({ 
      position: myLatlng, 
      map: map, 
      title: "Coordinates: " + lat + " , " + lng + " | Trailhead name: " + trailhead_name 
     }); 

     marker['infowindow'] = contentString; 

     global_markers[i] = marker; 

     google.maps.event.addListener(global_markers[i], 'click', function() { 
      infowindow.setContent(this['infowindow']); 
      infowindow.open(map, this); 
     }); 
    } 
+0

我剛剛嘗試過,同樣的問題仍然存在。每個html彈出包含相同的數據後點擊它:( – Genadinik 2011-03-17 18:43:14

+0

@Genadinik也許問題不在infowindow,但內容 – kjy112 2011-03-17 18:44:39

+0

剛剛檢查了數據庫和調試的內容,它應該肯定會有所不同 – Genadinik 2011-03-17 18:46:26

2

你說的沒錯,這是範圍和封鎖的問題。您正在全局範圍內定義infoWindow,然後在您的onclick處理程序中使用它。這意味着您將始終打開您在for循環的最後一次迭代中創建的infoWindow。

更改此代碼:

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

這樣:

var infoWindow = new google.maps.InfoWindow({ 
    content: contentString 
}); 
+0

我只是這樣做,但它並沒有真正解決問題:( – Genadinik 2011-03-17 18:07:30

+0

現在會發生什麼? – tilleryj 2011-03-17 18:24:58

+0

相同的確切問題。該修復似乎沒有任何影響。 – Genadinik 2011-03-17 18:28:04

1

您需要添加此

<script type="text/javascript" 
src="http://maps.google.com/maps/api/js?sensor=false"> 
</script> 

否則會一直在說谷歌沒有找到。