我目前正在使用Javascript API v3创建一些Google Maps应用程序。它是一个wordpress数据库的结果图,它动态地填充地图,在地图上创建标记,在侧边栏上显示wordpress文章列表。
我要做的是以下内容:
点击侧边栏上的wordpress文章的链接,而不是立即在文章上,它必须在地图上打开相应的infowindow。我试图用JQuery做到这一点,在链接上绑定一个click事件来打开infowindow,但不幸的是,它会一直打开最后创建的infowindow。
我确实理解这里的问题:JQuery仅在触发事件时评估'marker'变量,因此使用变量的最后已知值。
我想要做的是实际评估循环中的'标记'变量。在那里我被卡住了。如果有人能帮助我,我会非常感激。
感谢您抽出时间回答我。
以下是该应用的链接:http://88.191.128.36/buddypress/carte/
这里是函数本身:
function setMarkers(map, markers) {
for (var i = 0; i < markers.length; i++) {
var sites = markers[i];
var siteLatLng = new google.maps.LatLng(sites[1], sites[2]);
if( sites[4] == '10'){
var MarkerImage = new google.maps.MarkerImage('http://dediope.inovawork.net/buddypress/wp-content/themes/TheSource/images/marker-hotel.png');
} else if (sites[4] == '9') {
var MarkerImage = new google.maps.MarkerImage('http://dediope.inovawork.net/buddypress/wp-content/themes/TheSource/images/marker-golf.png');
}
var marker = new google.maps.Marker({
position: siteLatLng,
map: map,
icon: MarkerImage,
title: sites[0],
html: '<div><b>' + sites[0] + '</b> <br /> <a href="' + sites[3] + '"> Voir la fiche de ce lieu </a></div>'
});
marker_array[i] = marker ;
// THIS IS WHERE I NEED HELP :)
$j('#results_entry li .title:contains("' + sites[0] + '")').bind('click', function(){ infowindow.setContent( marker.html ); infowindow.open( map, marker ); }) ;
var contentString = '<div><b>' + sites[0] + '</b> <br /> <a href="' + sites[3] + '"> Voir la fiche de ce lieu </a></div>';
var infowindow = new google.maps.InfoWindow({
content: contentString
});
google.maps.event.addListener(marker, "click", function () {
infowindow.setContent(this.html);
infowindow.open(map, this);
});
}
}
PS:对不起,如果我没有解释得很好,我是法国人,所以我的英语不完美:)
答案 0 :(得分:3)
由于这篇文章,我终于找到了解决方案:
Google Maps v3 opens the last infoWindow when a marker is clicked
实现它的方法是将对象'marker'和'infowindow'实际传递给外部函数,然后绑定事件。这样它就会将正确的标记和信息绑定到链接上。
这里有一些代码向您展示我是如何做到的,以防其他人遇到与我相同的问题:
// I REPLACED THAT
$j('#results_entry li .title:contains("' + sites[0] + '")').bind('click', function(){ infowindow.setContent( marker.html ); infowindow.open( map, marker ); }) ;
// BY THAT
BindLink(marker, sites[0], infowindow);
我创建了一个BindLink函数OUTSIDE函数setmarkers()我有:
function BindLink( bmarker, titre, binfowindow ){
$j('#results_entry li .title:contains("' + titre + '")').bind('click', function(){
binfowindow.setContent( bmarker.html );
binfowindow.open( map, bmarker );
}) ;
}
现在它完美无缺(除了我无法想出关闭之前打开的信息窗口,但这是另一个故事!)