【发布时间】:2016-01-14 16:26:13
【问题描述】:
我正在尝试为多个标记创建多个信息窗口,但似乎只是参考最后一个信息窗口
这是我的代码(在 for 循环中,_lat 和 _long 是唯一值):
marker.addListener('click', function(){
//markerInfoWindow.close();
markerInfoWindow.setContent('<a href="#" onclick="onUnsavePlace(' + _lat + ',' + _long + ');">Unsave place</a>', true);
markerInfoWindow.open(map, this);
});
marker.setMap(map);
我用marker测试过,marker显示正确,但都链接到最后一个infoWindow。
如何为每个标记创建新的信息窗口?
更新:
这完全是我更新后的功能:
function getListPosition(listMarkers, map){
db.transaction(function(tx){
tx.executeSql('SELECT * FROM Position', [], function(tx, rs) {
var numberOfItems = rs.rows.length;
var markerInfoWindow = new google.maps.InfoWindow();
var marker;
for (var i = 0; i < numberOfItems; i++) {
var _lat = rs.rows.item(i).Lat;
var _long = rs.rows.item(i).Long;
marker = new google.maps.Marker({
position: {lat: _lat , lng: _long}
});
listMarkers.push(marker);
google.maps.event.addListener(marker, 'click', (function(marker) {
return function() {
markerInfoWindow.setContent('<a href="#" onclick="onUnsavePlace(' + _lat + ',' + _long + ');">Unsave place</a>', true);
markerInfoWindow.open(map, marker);
}
})(marker));
// marker.addListener('click', function(){
// //markerInfoWindow.close();
// markerInfoWindow.setContent('<a href="#" onclick="onUnsavePlace(' + _lat + ',' + _long + ');">Unsave place</a>', true);
// markerInfoWindow.open(map, this);
// });
marker.setMap(map);
// Set map center to the last marker
if (i == numberOfItems - 1){
map.setCenter({lat: _lat, lng: _long});
}
}
});
}, function(err){
console.log('Error when get list position. Error code: ' + err.code);
});
}
【问题讨论】:
-
它不适用于我的代码
-
您需要在
_lat和_lng以及标记(或从标记中获取它们)上的函数闭包。请提供Minimal, Complete, Tested and Readable example 说明问题,如果这没有帮助。 -
你能解释一下这个语法吗:
(function(marker, i) { return function() { infowindow.setContent(locations[i][0]); infowindow.open(map, marker); } })(marker, i)
标签: google-maps-api-3 google-maps-markers