返回单击的图层传单

时间:2016-10-17 13:59:38

标签: javascript leaflet leaflet.draw

我想选择一个创建的多边形,通过点击通过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);
  });
});

然而,这永远不会返回任何东西。 当我用drawnItems

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

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

1 个答案:

答案 0 :(得分:1)

至于drawnItems群组上的点击事件监听器没有显示任何内容,这可能是因为您在之前遍历drawnItems.eachLayer 它实际上已填充您绘制的要素/多边形

eachLayer将遍历当前子图层。它对以后可能添加的图层没有任何影响。

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

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

对于map上的听众,由于原始原因相同(id循环当前子图层,因此它始终显示相同的eachLayer,即您的drawnItems功能组也会发出drawnItems事件。"click"功能组也会发出id事件。因此,您实际上每次都会看到drawnItems的{​​{1}}。

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