我想选择一个创建的多边形,通过点击通过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在哪里?
答案 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}}。