【问题标题】:Returning clicked layer leaflet返回单击的图层传单
【发布时间】:2016-10-17 13:59:38
【问题描述】:

我想选择一个已创建的多边形,通过单击通过leaflet.draw 创建。 这就是我实现leaflet.draw的方式@

var drawnItems = new L.FeatureGroup();
map.addLayer(drawnItems);

// Initialise the draw control and pass it the FeatureGroup of editable   layers
var drawControl = new L.Control.Draw({
  edit: {
    featureGroup: drawnItems
  }
});
map.addControl(drawControl);

// event when polygon is created
map.on('draw:created', function(e) {
  var type = e.layerType,
    layer = e.layer;

  // add created polygon to Itemcollection
  drawnItems.addLayer(layer);

  // add to map
  map.addLayer(layer);
});

然后我想知道我点击了哪个多边形。我用each.layer 做这个

drawnItems.eachLayer(function(layer) {
  layer.on('click', function() {
    console.log(this._leaflet_id);
  });
});

但是,它永远不会返回任何东西。 当我用map替换drawnItems

map.eachLayer(function(layer) {
  layer.on('click', function() {
    console.log(this._leaflet_id);
  });
});

它有效 - 有点。它总是返回相同的id,即使我点击不同的多边形...hickup 在哪里?

【问题讨论】:

    标签: javascript leaflet leaflet.draw


    【解决方案1】:

    至于drawnItems 组上的单击事件侦听器未显示任何内容,这可能是因为您循环通过drawnItems.eachLayer 之前它实际上填充了您绘制的特征/多边形。

    eachLayer 将循环遍历 current 子层。它不会对以后可能添加的图层产生任何影响。

    您可以直接将您的听众附加到您的drawnItems 功能组。在这种情况下,您可以通过event.layer 访问触发事件槽的子层,其中event 是侦听器参数:

    drawnItems.on("click", function(event) {
        console.log("from drawnItems: " + event.layer._leaflet_id);
    });
    

    对于map 上的听众,由于相同的原始原因,它始终显示相同的ideachLayer 循环通过 当前 子层,即很可能只有 drawnItems在您的情况下),以及您的 drawnItems 功能组也发出 "click" 事件的事实。因此,您实际上每次都看到drawnItemsid

    演示:https://jsfiddle.net/3v7hd2vx/108/

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 2015-06-12
      • 2014-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多