Javascript 如何识别传单';在“popupopen”活动中使用的标记?
单击标记时,我需要执行一些代码,查找与所单击标记对应的Javascript 如何识别传单';在“popupopen”活动中使用的标记?,javascript,jquery,gis,openstreetmap,leaflet,Javascript,Jquery,Gis,Openstreetmap,Leaflet,单击标记时,我需要执行一些代码,查找与所单击标记对应的id,从后端API检索数据,然后将新检索的数据添加到将打开的弹出窗口的内容中 唯一能够侦听标记上的单击事件的方法是 map.on('popupopen', function(e){ // How to retrieve marker? // eg: Assign an id on creation, retrieve it now during popupopen };) 我怎样才能知道这是哪个标记?是否可以向每个标记添加一
id
,从后端API检索数据,然后将新检索的数据添加到将打开的弹出窗口的内容中
唯一能够侦听标记上的单击事件的方法是
map.on('popupopen', function(e){
// How to retrieve marker?
// eg: Assign an id on creation, retrieve it now during popupopen
};)
我怎样才能知道这是哪个标记?是否可以向每个标记添加一个id
属性,然后在popupopen
事件期间检索该id
?事件对象包含一个“popup”属性,该属性具有一个名为“\u source”的私有属性,该属性是弹出窗口绑定到的对象(即标记)。因为_source应该是私有的,所以这似乎不是正确的方法,但我不知道如何做
map.on('popupopen', function(e) {
var marker = e.popup._source;
});
Javascript对象可以定义任何属性。创建弹出窗口时,将popup.marker设置为引用的标记。然后您可以稍后在事件处理程序中访问它。要获取标记id,您可以使用以下代码:
map.on('popupopen', function(e) {
var marker = e.popup._source.feature.properties.markerid;
});
其他答案不起作用,但这确实起作用:
我猜这个库是非常不稳定的…我不知道为什么一开始就要传输这样复杂的信息 一个L.Marker
放在地图上:Marker.addTo(地图)
。我能够将id
值传递给每个标记
对象。这应该如何做,以及如何在以后的popupopen
事件中检索此id
?创建标记时,我会执行类似var marker=new L.marker(new L.LatLng(lat,lng))
然后marker.setContent(content).addTo(map)
。我在e.popup上得到undefined
。\u source
打开由L.geoJson()调用生成的弹出窗口时。有什么线索吗?我当时的肮脏解决方案是在onEachFeature
的弹出内容中包含一个
,然后在上面查找<代码>e.target.\u弹出窗口。\u contentNode.childNodes[0]。属性[0]
。是的,很脏,但很管用。phewExcellent Idea,因为在我的例子中,e.popup.\u source
wasnull
这个答案比公认的答案更值得商榷,因为e.popup.\u source
确实可能会丢失,例如,如果以编程方式打开/关闭弹出窗口(而不是单击)。
map.on('popupopen', function(e) { alert(e.popup._source._popup._content); });