从外部链接打开Goog​​le Maps Infowindow

时间:2011-02-21 12:06:25

标签: javascript jquery google-maps

我目前正在使用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:对不起,如果我没有解释得很好,我是法国人,所以我的英语不完美:)

1 个答案:

答案 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 ); 
    }) ;    
}

现在它完美无缺(除了我无法想出关闭之前打开的信息窗口,但这是另一个故事!)