2013-11-25 28 views
-2

下面的代碼將向我的地圖添加標記。但添加偵聽器事件永遠不會被添加到每個標記。映射不將單擊事件處理程序添加到標記

var mapDiv = document.getElementById("google-map"); 
    var infowindow = new google.maps.InfoWindow({ 
     content: 'test' 
    }); 

    var map = new google.maps.Map(mapDiv); 
    map.setCenter(new GLatLng(53.635784, 6.943359)); 
    map.setZoom(5); 

    for (var i = 0; i < data.length; i++) { 
     var dataMarker = data[i]; 
     var marker = new GLatLng(dataMarker.Latitude, dataMarker.Longitude); 
     map.addOverlay(new google.maps.Marker(marker, { 
      title: dataMarker.Name, 
      html: dataMarker.HtmlAttributes[0] 
     })); 
     google.maps.event.addListener(marker, 'click', function() {     
      infoWindow.setContent(this.html); 
      infoWindow.open(map, this); 
     });    
    } 

我在做什麼錯?

哦,我正在使用地圖v2。

+2

你爲什麼要開發新的代碼_deprecated_和_turned off_ [Google Maps Javascript API v2](https://developers.google.com/maps/documentation/javascript/v2/reference)? – geocodezip

回答

1

你沒有添加任何監聽器到。

var marker = new GLatLng(dataMarker.Latitude, dataMarker.Longitude); 

不是google.maps.Marker,這是一個google.maps.LatLng,這將不會對鼠標事件作出反應,因爲它不是一個UI元素,它只是一個JavaScript對象

0

您創建了最有可能與最後一個標記連接的事件偵聽器。

你必須鏈接信息窗口與標記在單獨的功能。

addEventListener(marker, infoWindow, map); 
} 

function addEventListener(marker, infoWindow, map) { 
    google.maps.event.addListener(marker, 'click', function() {     
     infoWindow.setContent(marker.html); 
     infoWindow.open(map, marker); 
    });    
} 

又見An array of infoWindow in Google maps api和鏈接有關關閉的解釋:作爲你的代碼的最後部分應該寫成。

+0

不,這裏不是這種情況。只有在閉包中引用循環('marker')中的變量時纔會發生這種情況。標記直接傳遞給此代碼片段中的'addListener',並不直接在閉包中引用。 – djd

0

看起來您在該片段中混合使用了v2和v3代碼,因此整件事情不太可能奏效。

例如,您在與GLatLng相同的地方使用new google.maps.Infowindow(v3)。

我的建議是將頁面上的引導程序更改爲v3,並刪除對v2對象的任何引用(如GLatLng)。確保你正在加載這樣的API:

<script src="//maps.googleapis.com/maps/api/js?…"></script> 
相關問題