谷歌用多个信息窗口映射多个标记
google maps multiple markers with multiple info window
我正在尝试在我的页面上放置一个带有多个标记(>1000)的谷歌地图,每个标记都有自己独特的信息窗口。我通过一个数组添加标记,标记看起来很好,但所有信息窗口都有相同的确切内容。我不知所措,非常感谢你的消息。这是我的代码:
<script>
var map;
var markersArray = [];
var infowindow = new google.maps.InfoWindow({
content: ''
});
function initialize() {
bounds = new google.maps.LatLngBounds();
usa = new google.maps.LatLng(37.09024, -95.712891);
var myOptions = {
zoom: 4,
center: usa,
mapTypeId: google.maps.MapTypeId.ROADMAP,
navigationControlOptions: {
style: google.maps.NavigationControlStyle.SMALL
}
};
map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
plotMarkers();
}
// here is where the array content is contained
var webApps = [<%=strArray%>];
function plotMarkers(){
var i;
for(i = 0; i < webApps.length; i++){
codeAddresses(webApps[i]);
}
}
function codeAddresses(address){
// other variables
lat = address[3];
lng = address[4];
desc = address[0]
myLatlng = new google.maps.LatLng(lat,lng);
var marker = new google.maps.Marker({
position: myLatlng,
map: map,
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(desc);
infowindow.open(map, this);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
<div id="map_canvas" style="width: 100%; height: 600px;"></div>
看起来desc
是一个全局变量。因此,在循环的每次迭代中,您都将其设置为其他内容,这意味着它将始终等于您迭代的最后一项的描述。
试着把var
放在它前面,使它成为一个局部变量。例如:var desc = address[0];
。
当您这样做时,一个名为"闭包"的概念将确保您创建的每个侦听器在创建desc
时都会引用它的值,而不是上次设置的值。
出于以下几个原因,避免使用全局变量是一种最佳做法,这就是其中之一。您应该养成在变量前面加上var
的习惯。
可变范围信息:
http://msdn.microsoft.com/en-us/library/ie/bzt2dkta(v=vs.94).aspx
关闭信息:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Closures
我遇到了同样的问题,最终发现文档中有一篇文章解决了这个问题:
https://developers.google.com/maps/documentation/javascript/examples/event-closure
除了Kai提到的全局与局部变量之外,你还需要弄清楚函数的闭包。简而言之,分配信息窗口及其描述的代码片段和添加事件侦听器的代码片段需要是一个单独的函数。
有关更多详细信息,请参阅上面的文章。
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 防止Iframe窗体在新窗口中打开
- 如何在映射数组中添加换行符
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- ng映射方向备选方案
- 调整窗口大小时,可拖动的对象会出现在容器外部
- 无法通过数组映射绑定
- Javascript排序的图像弹出窗口..可以't单独弹出
- 窗口大小html css
- 弹出窗口出现,然后退出
- 更改内容信息窗口映射v3
- 谷歌从数组中映射标记、折线和窗口信息
- 图像映射区域无法触发单击事件.afer最大化寡妇或恢复窗口单击事件触发
- 数据映射:如何在mouseover上显示弹出窗口并自定义mouseover事件侦听器
- 谷歌用多个信息窗口映射多个标记
- 图像映射新窗口打开
- jquerybing映射窗口标记未触发的点击事件
- 单击图像映射并在引导程序中打开模态窗口
- 谷歌地图JS API V3,添加了多个标记来映射来自远程json源的信息窗口
- 如何制作图像映射弹出窗口