2016-10-17 5 views
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); 
    }); 
}); 

Однако это никогда не возвращает ничего. Когда я заменяю drawnItems с map

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

Он работает - своего рода. Он всегда возвращает то же самое id, хотя, даже если я нажимаю на разные полигоны ... Где хиклуп?

ответ

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 каждый раз.

Демонстрация: https://jsfiddle.net/3v7hd2vx/108/