首页 文章

确定何时单击Leaflet Draw取消按钮

提问于
浏览
5

问题

我正在使用leaflet draw作为我的应用程序,我的'remove'按钮处于活动状态 . 删除按钮有三个选项:

  • 保存

  • 取消

  • 全部清除

我希望在用户单击“保存”时调用函数 foo() ,但是,如果他们单击“取消”,则需要调用函数 bar() .

Live demo

解决方案

我知道这可以通过简单地给它一个ID,并添加一个事件监听器来实现,但它并不像我认为的那样干净 .

理想的解决方案

Leaflet绘制了自己的方法,用于检测按钮何时被按下,但在我看来,它们只能在更高的级别上进行 . 例如:

draw:deletestop这是编辑的类型 . 其中之一:删除当用户完成删除形状(删除模式)并保存时触发 . - 传单文件

这允许我在用户选择了三个选项中的 any 之后调用 foo() ,表明他们已经完成了处理删除按钮交互 .

我无法在文档中找到一种方法,能够在按下的各个按钮上侦听传单绘制触发事件 .

2 回答

  • 1

    取消/禁用功能的处理程序存储为 L.Control.Draw 实例的一部分 . 因此,您可以在实例化 L.Control.Draw 对象后立即修改处理程序:

    var myDrawControl = new L.Control.Draw();
    
    myDrawControl._toolbars.edit.disable =  function () {
      if (!this.enabled()) {
        /* If you need to do something right as the
           edit tool is enabled, do it here right
           before the return */
        return;
      }
    
      this._activeMode.handler.revertLayers();
      /* If you need to do something when the
         cancel button is pressed and the edits
         are reverted, do it here. */
      L.Toolbar.prototype.disable.call(this);
    };
    

    处理程序的源代码是here,虽然这很好用,但您必须小心可能会更改处理程序功能的Leaflet.Draw的未来版本 .

  • 2

    您可以使用Leaflet.draw 0.4.14的最新版本

    map.on('draw:toolbarclosed',function(){//在此处添加代码});

相关问题