返回点击层传单

Returning clicked layer leaflet

我想select创建一个多边形,通过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);
  });
});

然而,那从来没有returns什么。 当我将 drawnItems 替换为 map

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

有点用。它总是 returns 相同的 id,即使我点击不同的多边形...问题在哪里?

至于你在 drawnItems 组上的点击事件监听器没有显示任何东西,这可能是因为你循环 drawnItems.eachLayer before 它实际上充满了您绘制的要素/多边形。

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

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

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

至于您在 map 上的监听器,由于相同的原始原因,它始终显示相同的 ideachLayer 循环 current 子层,即在您的情况下很可能只有 drawnItems),并且您的 drawnItems 功能组也会发出 "click" 事件。因此,您实际上每次都看到 drawnItemsid

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