Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在DrawingManagerControl按钮上添加事件侦听器?_Javascript_Jquery_Google Maps - Fatal编程技术网

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
    事件。但是,事件仍然存在。有关未记录事件起源的解释,请参见上文。