我在使用 infoWindows 和 Google Maps API v3 时遇到了问题。
最初,我遇到了其他人在打开新窗口时关闭 infoWindows 的问题。
我想通过预先定义“infowindow”来解决这个问题。现在,当我单击新标记时它们会关闭,但内容是相同的。
我应该如何重新构建我的代码以确保内容每次都是正确的 - 并且在给定时间只有一个信息窗口打开?
谢谢你!
Paul
var allLatLngs = new Array();
var last = 0;
var infowindow;
function displayResults(start, count){
if(start === undefined){
start = last;
}
if(count === undefined){
count = 20;
}
jQuery.each(jsresults, function(index, value) {
if(index >= start && index < start+count){
var obj = jQuery.parseJSON(value);
$("#textresults").append(index + ": <strong>" + obj.name + "</strong> " + Math.round(obj.distanz*100)/100 + " km entfernt" + "<br/>");
var myLatlng = new google.maps.LatLng(obj.geo_lat, obj.geo_lon);
allLatLngs.push(myLatlng);
var contentString = '<strong>'+obj.name+'</strong>';
infowindow = new google.maps.InfoWindow({
content: contentString
});
var marker = new google.maps.Marker({
position: myLatlng,
//title:"Hello World!"
});
marker.setMap(map);
google.maps.event.addListener(marker, 'click', function() {
if (infowindow) { infowindow.close(map,marker); }
infowindow.open(map,marker);
});
}
});
last = start+count;
UPDATED
你正在呼唤
infowindow.open(map,marker);
在 jQuery.each 迭代中,因此,我认为它将调用迭代中的最后一项。
修改您的代码,以便在 jQuery.each 迭代中得到它。
var curItem = 1;
google.maps.event.addListener(aMarker, "click", function(idx, theContent) {
return function() {
alert(idx); //Should print 1 marker1, 2 for marker 2, to show it's ok.
//Your stuff...
if (infowindow) {
infowindow.close(map,marker);
}
infowindow.setContent(theContent);
infowindow.open(map,marker);
}
} (curItem++, contentString)
);
当你看到“return function()”时,我正在使用JavaScript 闭包。我刚刚将这个闭包用于其他东西。我已经摆脱了之前答案中的其他变体。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)