1

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

但是,这永远不会返回任何东西。当我替换drawnItemsmap

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

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

4

1 回答 1

1

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

eachLayer将循环通过当前子层。它不会对以后可能添加的图层产生任何影响。

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

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

至于您的监听器,由于相同的原始原因(循环通过当前子层,即很可能仅在您的情况下)以及您的功能组也发出事件的事实map,它始终显示相同。因此,您实际上每次都看到您的。ideachLayerdrawnItemsdrawnItems"click"iddrawnItems

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

于 2016-10-17T20:05:34.877 回答