Javascript 如何在DrawingManagerControl按钮上添加事件侦听器?
我想在Javascript 如何在DrawingManagerControl按钮上添加事件侦听器?,javascript,jquery,google-maps,Javascript,Jquery,Google Maps,我想在绘制多边形按钮上捕获单击事件。但是DrawingManager API只提供OverlyComplete事件(polygoncomplete、circlecomplete等)。如何在这些按钮上添加单击事件?特别是我想禁止绘制第二个多边形,如果一个多边形形状已经在地图上。所以我想添加一个点击处理程序到绘制多边形按钮并返回否定响应 UPD: 因此,我做了如下工作: onDrawingmode_changedListener = google.maps.event.addListener(dra
绘制多边形
按钮上捕获单击
事件。但是DrawingManager API只提供OverlyComplete
事件(polygoncomplete、circlecomplete等)。如何在这些按钮上添加单击事件?特别是我想禁止绘制第二个多边形,如果一个多边形形状已经在地图上。所以我想添加一个点击处理程序到绘制多边形按钮并返回否定响应
UPD:
因此,我做了如下工作:
onDrawingmode_changedListener = google.maps.event.addListener(drawingManager, 'drawingmode_changed', function(e) {
if(this.getDrawingMode() == "polygon") {
if(polygon) {
alert("You already have one polygon shape on the map. Remove it in order to draw a new one.");
this.setDrawingMode(null);
}
}
});
没有实现访问这些控件的方法。您有两种选择:
观察DrawingManager实例的drawingmode\u changed
-事件。当drawingmode
设置为google.maps.drawing.POLYGON
时,将其设置为null
(不再能够绘制多边形)
更新drawingManager.drawingControlOptions.drawingModes
。将其设置为包含除google.maps.drawing.POLYGON之外的所有覆盖类型的数组(这将删除POLYGON控件)。这里还将drawingmode
设置为null
drawingmode
\u已更改事件的说明:
DrawingManager实例是一个。MVCObject具有内置属性设置器(set()
和setValues()
)。Maps API使用这些setter来设置属性。每次使用这些方法时,都会触发一个事件,该事件的名称包含属性名称和字符串\u changed
(例如,当您通过setter设置MVCObject
的属性weather
时,将触发一个事件weather\u changed
)。使用特定的setter函数(setZoom、setCenter、setMap等)时也会发生这种情况
因此,您可以假设,对于MVCObject的每个属性,只要使用setter(应用于内置属性和自定义属性),无论事件是否记录,都将触发\u changed
-事件
例如:
google.maps.event.addListener(map,'weather_changed',function(){
alert('it\'s '+this.get('weather'));
});
//this will fire a weather_changed-event
map.set('weather','rainy');
//this will not fire an event, because it doesn't use a setter-method
map.weather='rainy';
很好的解决方案。我选择了第一个,它工作得非常完美,正如我所需要的。非常感谢。请注意:API参考页()没有drawingmode\u changed
事件。但是,事件仍然存在。有关未记录事件起源的解释,请参见上文。