如何在“popupopen”事件期间识别 Leaflet 的标记?

Posted

技术标签:

【中文标题】如何在“popupopen”事件期间识别 Leaflet 的标记?【英文标题】:How to identify Leaflet's Marker during a `popupopen` event? 【发布时间】:2012-09-23 22:52:12 【问题描述】:

当一个标记被点击时,我需要执行一些代码来找到与被点击的标记相对应的id,从后端API检索数据,然后将新检索到的数据添加到弹出窗口的content打开。

能够监听标记上的点击事件的唯一方法是

map.on('popupopen', function(e)
    // How to retrieve marker?
    // eg: Assign an id on creation, retrieve it now during popupopen
;)

我怎样才能知道这是哪个标记?是否可以为每个标记添加id 属性,然后在popupopen 事件期间检索此id

【问题讨论】:

leaflet.cloudmade.com/reference.html#marker L.Marker 放置在地图上:marker.addTo(map)。我可以将id 值传递给每个marker 对象。这应该如何完成,以及如何在popupopen 事件期间稍后检索此id 创建标记时,我会执行var marker = new L.marker( new L.LatLng( lat, lng )); 然后marker.setContent(content).addTo(map) 之类的操作。 【参考方案1】:

事件对象包含一个“popup”属性,该属性具有一个名为“_source”的私有属性,该属性是弹出窗口绑定到的对象(即标记)。由于 _source 应该是私有的,这似乎不是正确的方法,但我不知道该怎么做。

map.on('popupopen', function(e) 
  var marker = e.popup._source;
);

【讨论】:

在打开由L.geoJson() 调用生成的弹出窗口时,我在e.popup._source 上收到undefined。有什么线索吗? 我目前的dirty解决方案是在onEachFeature 的弹出内容中包含<div>,然后在...e.target._popup._contentNode.childNodes[0].attributes[0] 上查找它。是的,很脏,但它有效。 【参考方案2】:

javascript 对象可以定义任何属性。创建弹出窗口时,将 popup.marker 设置为引用的标记。然后您可以稍后在事件处理程序中访问它。

【讨论】:

好主意,因为在我的例子中 e.popup._sourcenull 这个答案可以说比接受的答案更好,因为e.popup._source 确实可能会丢失,例如,如果以编程方式打开/关闭弹出窗口(而不是单击)。【参考方案3】:

要获取标记 id,您可以使用以下代码:

map.on('popupopen', function(e) 
  var marker = e.popup._source.feature.properties.markerid;
);

【讨论】:

【参考方案4】:

其他答案无效,但可以:

map.on('popupopen', function(e)  alert(e.popup._source._popup._content); );

猜想这个库非常不稳定......我不知道为什么首先传输这些信息会如此复杂。

【讨论】:

以上是关于如何在“popupopen”事件期间识别 Leaflet 的标记?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python pandas 在 read_csv 期间识别不良记录?

Anylogic - 模型创建期间的错误:如何识别?

SSL UNABLE_TO_VERIFY_LEAF_SIGNATURE 的 Node.js 错误

如何在WindowClosing事件期间更新JFrame对象?

如何在平移手势事件期间转换一条线?

如何在jQuery点击事件中使用宽度?