我有一组与标记数组相对应的信息窗口。 现在,我有一个问题,我使用下面的代码生成一个信息窗口,当点击标记时,所有标记都消失,除非一个,当我点击该标记时,没有信息窗口出来。 我的代码有什么问题?或者我该怎么办?
任何答案都将非常感谢,提前致谢。
此代码位于for循环中:
infoWindoArray[i][j] = new google.maps.InfoWindow({
content:"Lat: "+this.position.lat() + "\nLng: " + this.position.lng() + "\n"+ this.customInfo,
});
google.maps.event.addListener(AllMarkers[i][j], 'click', (function(x) {
return function() {infoWindoArray[i][j].open(map,AllMarkers[i][j]);}
})(x));
编辑:我添加整个for循环更清晰:
for (var i = 0; i < ArrayOfAllFilesData.length-1; i++) {//to select certain file.
var myarr = ArrayOfAllFilesData[i+1];
AllMarkers[i] = new Array();
for (var j=0; j < myarr.length; j++) {
var marker_center = new google.maps.LatLng(myarr[j][0],myarr[j][1]);
AllMarkers[i][j] = new google.maps.Marker({
position: marker_center,
customInfo: "Number of encounters: "+myarr[j][2],
title:'Click to zoom',
visible:true,
});
AllMarkers[i][j].setMap(map);
};
};
}
答案 0 :(得分:1)
这是一种折衷的方法,每个制造商有一个infoWindow,但infowindows不是事先创建的。相反,它们是按需创建的,因为每个标记都被点击。
这样,就不会创建永远不会看到的infoWindows。一旦创建,每个infoWindow将在用户重新访问其标记时重复使用。
在嵌套的i / j循环之外:
var AllMarkers = [];//Not necessary unless used elsewhere
function clickMarker_closure(arr) {
return function() {
if(!this.infoWin) {
this.infoWin = new google.maps.InfoWindow({
content: [
"Lat: " + this.position.lat(),
"Lng: " + this.position.lng(),
"Number of encounters: " + arr[2]
].join("\n")
});
}
this.infoWin.open(map, this);
};
}
嵌套的i / j循环:
for (var i=0; i<ArrayOfAllFilesData.length-1; i++) {//to select certain file.
var myarr = ArrayOfAllFilesData[i+1],
marker;
AllMarkers[i] = [];//necessary?
for (var j=0; j < myarr.length; j++) {
marker = new google.maps.Marker({
map: map,
position: new google.maps.LatLng(myarr[j][0], myarr[j][1]),
title: 'Click to zoom',
visible: true,
});
AllMarkers[i][j] = marker;//necessary?
google.maps.event.addListener(marker, 'click', clickMarker_closure(myarr[j]));
}
}
用户将不知道infoWindows是按需创建的。
修改1