在样式化的地图图标和标签上单击事件监听器

时间:2014-01-31 17:57:46

标签: google-maps-api-3 google-maps-styled

是否可以在为样式化地图显示的图标和/或标签上添加click事件的侦听器?我有一个允许进入兴趣点的表格。由于poi样式显示许多潜在候选人的图标和/或标签,并且点击一个打开带有地址信息等的信息窗口,我想将此地址信息捕获到我的表单上的字段,如果用户点击一个。 / p>

2 个答案:

答案 0 :(得分:8)

对POI没有基于API的访问权限。

但是有一种可能的解决方法。

当您点击POI时,InfoWindow会打开。可以修改InfoWindow-prototype,以便能够访问InfoWindow的内容,而无需引用InfoWindow实例。

      //store the original setContent-function
      var fx = google.maps.InfoWindow.prototype.setContent;

      //override the built-in setContent-method
      google.maps.InfoWindow.prototype.setContent = function (content) {
          //when argument is a node
          if (content.querySelector) {
              //search for the address
              var addr = content.querySelector('.gm-basicinfo .gm-addr');
              if (addr) {

                  alert(addr.textContent);
                  //leave the function here 
                  //when you don't want the InfoWindow to appear

              }
          }
          //run the original setContent-method
          fx.apply(this, arguments);
      };

演示:http://jsfiddle.net/doktormolle/Vkf43/

注意:infowindow的选择器没有记录,将来可能会改变

答案 1 :(得分:4)

我意识到这是旧Q,但最近在Maps API中修复了这个问题。您现在可以在地图图标上收听点击事件。

从版本3.26开始,你应该听到"点击" Map对象上的事件。如果用户单击POI,则会引发IconMouseEvent。此类扩展了Regular MouseEvent,并包含一个名为placeId的属性。因此,您可以检查事件对象是否已定义placeId。 placeId字段当然包含Place Id,您可以使用Places API获取有关所单击图标的更多信息。在事件本身上调用stop()将阻止Maps API显示默认信息窗口。

我准备了一个小型演示,演示如何捕获click事件并显示您自己的信息窗口。

http://jsbin.com/parapex/edit?html,output