我知道如何在地图上设置点击事件,点击随机位置时效果很好。但是,当我点击营业地点时,Google地图会显示包含有关商家信息的气球,但不会将点击事件提升为我的JavaScript。
您可以在此地理编码演示(http://rjshade.com/projects/gmaps-autocomplete/)上看到这种情况。浏览地图到某个城市并单击随机位置:地址显示在文本框中(华友世纪!)。现在找到一些营业场所并点击:地图会弹出气球,但不会向JavaScript发送任何点击事件来更新文本框。具有讽刺意味的是:气球中提供了所需的地址信息 !
如何处理Google地图中商家位置的点击事件?
截图:
答案 0 :(得分:15)
编者注:此答案适用于版本3.23。自2016年发布的3.24版以来,您可以使用clickableIcons
地图选项。 See this answer 的
基本上没有办法处理POI上的点击。
当然,你可以通过样式隐藏这些功能,但是当你想让它们在地图上可见时,这里有一个解决方法(基于:click event listener on styled map icons and labels):
当您点击信息窗口打开信息窗口时,您可以访问该信息。
覆盖setPosition
- 原型的InfoWindow
- 方法,以便触发点击地图。
//keep a reference to the original setPosition-function
var fx = google.maps.InfoWindow.prototype.setPosition;
//override the built-in setPosition-method
google.maps.InfoWindow.prototype.setPosition = function () {
//logAsInternal isn't documented, but as it seems
//it's only defined for InfoWindows opened on POI's
if (this.logAsInternal) {
google.maps.event.addListenerOnce(this, 'map_changed',function () {
var map = this.getMap();
//the infoWindow will be opened, usually after a click on a POI
if (map) {
//trigger the click
google.maps.event.trigger(map, 'click', {latLng: this.getPosition()});
}
});
}
//call the original setPosition-method
fx.apply(this, arguments);
};
答案 1 :(得分:7)
这是Google Maps API issue tracker中跟踪的问题#4797,最近修复了,并且在3.26版中提供。
从版本3.26开始,你应该听到"点击" Map对象上的事件。如果用户点击POI,则会引发IconMouseEvent。此类扩展了Regular MouseEvent,并包含一个名为placeId的属性。因此,您可以检查事件对象是否已定义placeId。 placeId字段当然包含Place Id,您可以使用Places API获取有关所点击图标的更多信息。
我准备了一个小型演示:http://jsbin.com/parapex/10/edit?html,output
单击地图时,会触发ClickHandler对象的handleClick方法。你可以看到它检查placeId。然后它路由到该地点(使用placeId),最后使用Maps API中的Places服务获取有关该地点的信息(在这种情况下是名称,图标和地址)。