Javascript 谷歌地图3:当任何标记点击时,相同的信息窗口打开
我的谷歌地图上有几个标记。每一个都有文本,以信息窗口的形式单击时应该显示这些文本。下面是所有这些的代码。然而,问题是,当我点击地图上的任何标记时,它总是与地图放大的标记相同,并弹出同一标记的信息窗口。无论我点击哪里,它都是一样的 想知道我是否有明显的错误。有人能给我一些建议吗Javascript 谷歌地图3:当任何标记点击时,相同的信息窗口打开,javascript,google-maps-api-3,Javascript,Google Maps Api 3,我的谷歌地图上有几个标记。每一个都有文本,以信息窗口的形式单击时应该显示这些文本。下面是所有这些的代码。然而,问题是,当我点击地图上的任何标记时,它总是与地图放大的标记相同,并弹出同一标记的信息窗口。无论我点击哪里,它都是一样的 想知道我是否有明显的错误。有人能给我一些建议吗 function getlistings() { $.getJSON('list/listings.json', processlistings); } function p
function getlistings()
{
$.getJSON('list/listings.json', processlistings);
}
function processlistings(data)
{
listings = data;
markersArray = [];
for( i = 0; i < listings.length; i++)
{
var listing = listings[i];
var markerLatLng = new google.maps.LatLng(parseFloat(listing["latitude"]), parseFloat(listing["longitude"]));
marker = new google.maps.Marker({
position : markerLatLng,
title: listing['name'],
map : map
});
var infowindow = new google.maps.InfoWindow(
{
content: listing['name'],
position: markerLatLng
});
google.maps.event.addListener(marker, 'click', function()
{
infowindow.open(map);
});
markersArray.push(marker);
}
函数getlistings()
{
$.getJSON('list/listings.json',processlistings);
}
函数processlistings(数据)
{
清单=数据;
markersArray=[];
对于(i=0;i}当您在列表中循环时,您正在覆盖infowindow的var内容。相反,您需要更改单击以将内容设置为
this.title
var infoWindow = new google.maps.InfoWindow({content: 'Loading...'});;
function processlistings(data)
{
listings = data;
markersArray = [];
for( i = 0; i < listings.length; i++)
{
var listing = listings[i];
var markerLatLng = new google.maps.LatLng(parseFloat(listing["latitude"]), parseFloat(listing["longitude"]));
marker = new google.maps.Marker({
position : markerLatLng,
title: listing['name'],
map : map
});
markersArray.push(marker);
}
for (var i = 0; i < markersArray.length; i++) {
var marker = markersArray[i];
google.maps.event.addListener(marker, 'click', function () {
infoWindow.setContent(this.title);
infoWindow.open(map, this);
});
}
}
var infoWindow=new google.maps.infoWindow({content:'Loading…});;
函数processlistings(数据)
{
清单=数据;
markersArray=[];
对于(i=0;i
当您在数据中循环时,会多次创建一个信息窗口。在循环的末尾,您有一个InfoWindow
位于markerLatLng
单击标记时,将调用infowindow.open()
,它使用位于markerlatng
的信息窗口
您需要使用函数闭包,如中所示
//循环遍历标记,但使用辅助函数创建每个标记
var point=new google.maps.LatLng(43.82589,-79.10040);
var marker=createMarker(点,“要在第三个信息窗口中显示的某些内容”)
函数createMarker(latlng,html){
var contentString=html;
var marker=new google.maps.marker({
位置:latlng,
地图:地图,
zIndex:Math.round(latlng.lat()*-100000)很好,但是在createMarker函数的末尾添加“return marker;”。关键是使用单独的函数创建标记,然后将其推到地图中。
//loop through markers, but create each with a helper function
var point = new google.maps.LatLng(43.82589,-79.10040);
var marker = createMarker(point,'Some stuff to display in the<br>Third Info Window')
function createMarker(latlng, html) {
var contentString = html;
var marker = new google.maps.Marker({
position: latlng,
map: map,
zIndex: Math.round(latlng.lat()*-100000)<<5
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.setContent(contentString);
infowindow.open(map,marker);
});
}