我非常感谢本论坛的帮助。 所以我即将在地图上带来不同的标记组 使用切换功能,完全正常。
我的eventlisteners打开标记信息窗口。
当我运行以下代码并点击其中一个标记时, 它总是弹出我的数组的最后一个标记的信息窗口。 所以机制有效,但似乎没有迭代了。
我对这个问题考虑了很多,但我没有得出结论。 谢谢你的帮助。
这是代码
var deutschland = new google.maps.LatLng(51,9);
function initialize(){
var mapOptions = { zoom: 6,
center: deutschland,
streetViewControl: true,
scaleControl: true,
mapTypeControl: true,
mapTypeId: google.maps.MapTypeId.ROADMAP }
var map = new google.maps.Map(document.getElementById("map-container"),mapOptions);
lat_data = [
['mid',50.0010400,9.0730700,'company1','marker.png','infowindow text 1'],
['mid',50.2010057,8.2592738,'company2','marker.png','infowindow text 2'],
['West',50.7430120,7.1264100,'company3','marker_green.png','infowindow text 3'],
....
];
markers = [];
var i, newMarker;
for (i = 0; i < lat_data.length; i++) {
var infowindow = new google.maps.InfoWindow({
content: lat_data[i][5]
});
var shadow = new google.maps.MarkerImage('http://maps.google.com/mapfiles/shadow.png,
new google.maps.Size(37,32),
new google.maps.Point(0,0),
new google.maps.Point(0,32));
var image =
new google.maps.MarkerImage('http://maps.google.com/mapfiles/'+lat_data[i][4],
new google.maps.Size(20,32),
new google.maps.Point(0,0),
new google.maps.Point(0,32));
newMarker = new google.maps.Marker({
position: new google.maps.LatLng(lat_data[i][1], lat_data[i][2]),
map: map,
title: lat_data[i][3],
icon: image,
shadow: shadow
});
newMarker.category = lat_data[i][0];
newMarker.setVisible(true);
google.maps.event.addListener(newMarker,'click',function(){
infowindow.open(map,newMarker);
});
google.maps.event.addListener(map,'click',function(){
infowindow.close(map,newMarker);
});
markers.push(newMarker);
}
}
function displayMarkers(category) {
var i;
for (i = 0; i < markers.length; i++) {
if (markers[i].category == category) {
if (markers[i].getVisible()) {
markers[i].setVisible(false); }
else { markers[i].setVisible(true); } } }
答案 0 :(得分:0)
现在我回答我自己的问题(很酷,我之前从未这样做过!)
根据关于闭包的mozilla.org教程,我编写了以下代码:
.......
iw = new google.maps.InfoWindow({
content: lat_data[i][5]
});
function make_open_event_callback(iw){
return function(){
iw.open(map,this);
};
}
function make_close_event_callback(iw){
return function(){
iw.close(map,this);
};
}
google.maps.event.addListener(newMarker,'click',make_open_event_callback(iw));
google.maps.event.addListener(map,'click',make_close_event_callback(iw));
markers.push(newMarker);