【发布时间】:2014-12-22 14:11:31
【问题描述】:
我有一个 json 对象 infoCentros 用于构建地图,如下所示:
for ( var i = 0; i < infoCentros.length; i++ ) {
var centro = infoCentros[i];
var lat = centro.cordenadas.lat;
var lon = centro.cordenadas.long;
if (lat && lon) {
c++;
latlon = new google.maps.LatLng(lat, lon);
var moptions = {
position: latlon,
map: $project.gmap
}
moptions.icon = theme_uri + '/images/marker.png';
var marker = new google.maps.Marker(moptions);
$project.mapMarkers.push(marker);
google.maps.event.addListener(marker, 'click', function() {
$project.mapInfoWindow.setContent(
'<div class="sescam-info-window">' +
'<h3>' + centro.nombre + '</h3>' +
'<p>' + centro.lugar + '</h3>' +
'<p>Coordinador</p>' +
'<p>' + centro.coordinador.nombre + '</p>' +
'<p>' + centro.coordinador.email + '</p>' +
'<p>Responsable</p>' +
'<p>' + centro.responsable.nombre + '</p>' +
'<p>' + centro.responsable.email + '</p>'
+ '</div>'
);
$project.mapInfoWindow.open($project.gmap, marker);
});
$project.mapBounds.extend(latlon);
}
}
它似乎工作正常,但如果我有 5 个标记,我点击哪个并不重要,信息窗口总是对应于最后一项(位置和内容),
知道我错过了什么吗?我认为将 marker 传递给 addListener 就可以解决问题..
【问题讨论】:
-
您需要使用闭包将内容分配给事件侦听器中的信息窗口,请参阅developers.google.com/maps/documentation/javascript/examples/…
-
@duncan 我不明白,你的意思是用这个?
infowindow.open(marker.get('map'), marker); -
不,您对
google.maps.event.addListener的调用应该使用外部函数而不是匿名内联函数。
标签: javascript google-maps google-maps-api-3 infowindow marker