谷歌地图API V3 - 从外部点击打开信息窗口

7
所以我有一个被初始化的V3地图,如下所示:
function init() {
        var mapCenter = new google.maps.LatLng(51.5081289,-0.128005);
        var map = new google.maps.Map(document.getElementById('map'), {
          'zoom': 6,
          'center': mapCenter,
          'mapTypeId': google.maps.MapTypeId.ROADMAP, 
          panControl: false,
          mapTypeControl: false,
          zoomControl: true,
          zoomControlOptions: {
                style: google.maps.ZoomControlStyle.SMALL,
                position: google.maps.ControlPosition.LEFT_TOP
            },
        });

"还有一堆看起来像这样的标记笔:"
var marker25837500 = new google.maps.Marker({
              map: map, 
              pop_title: 'blah blah',                                                                                                 
              pop_wind: 'more blah',
                      zIndex: 999,
              icon: 'images/map_icons/s6.png'
            }); 
            google.maps.event.addListener(marker25837500, 'click', onMarkerClick);

最后,我有一个函数,在每个标记被点击时打开信息窗口:
var infoWindow = new google.maps.InfoWindow;

var onMarkerClick = OpenInfoWindow;

function OpenInfoWindow() {
          var marker = this;
          infoWindow.setContent('<h3>' + marker.pop_title + '</h3>' +
                                         marker.pop_body);

          infoWindow.open(map, marker);
        };
        google.maps.event.addListener(map, 'click', function() {
          infoWindow.close();
        }); 

我的问题是,如果我点击页面内的某个元素(比如说一个
2个回答

11

您可以使用 trigger 事件。

$('#marker25837500').click(function () {
    google.maps.event.trigger(marker25837500, 'click')
})

看这里- https://developers.google.com/maps/documentation/javascript/reference#event

编辑: 还注意到当点击marker25837500时,您调用了onMarkerClick(),但是您命名另一个函数为OpenInfoWindow(),因此您可能还需要更改它。


您能在此函数中使用 alert(marker25837500) 并检查变量 marker25837500 是否在作用域内吗? - Salman
是的 - 警告给了我 [object HTMLDivElement] - 所以看起来没问题。另外,我错过了一些在 OpenInfoWindow 上面的行,现在已经添加进去了...谢谢。 - user1051849
嗯。警告应该显示一个标记对象 - 指的是您的代码 var marker25837500 = new google.maps.Marker({... 所以还有其他问题。 - Salman
1
是的 - Uncaught ReferenceError: marker25837500x 未定义 - 我没有正确声明它吗?谢谢... - user1051849
如果我把所有的信息窗口都放在一个数组里会怎样? - Si8
显示剩余3条评论

2

你不需要做任何不寻常的事情或模拟对标记的 click;只需确保可以访问 OpenInfoWindow 函数:

//This is the simple case:
var myDiv = document.getElementById( "marker25837500" );
google.maps.event.addDomListener( myDiv, "click", OpenInfoWindow );

//Or if you have other things that you want to accomplish when this occurs:
var myDiv = document.getElementById( "marker25837500" );
google.maps.event.addDomListener( myDiv, "click", function() {
    OpenInfoWindow();
    //Do other stuff here
});

只要在调用OpenInfoWindow函数时可以使用(即可以访问InfoWindow),这将正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接