How to identify Leaflet's Marker during a `popupopen` event?

22,499

Solution 1

The event object contains a "popup" attribute that has a private attribute called "_source" which is the object that the popup is bound to (i.e. the marker). Since _source is supposed to be private this doesn't seem like the right way but I'm not sure how else to do it.

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

Solution 2

Javascript objects can have any properties defined on them. Set popup.marker to the referenced marker when you create the popup. Then you can access it later in the event handler.

Solution 3

Other answers didn't work, but this does:

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

Guess this library is pretty volatile ...and I'm not sure why it's this complicated to transmit such information in the first place. <shrug>

Solution 4

To get the marker id, you can use this code:

map.on('popupopen', function(e) {
  var marker = e.popup._source.feature.properties.markerid;
});
Share:
22,499

Related videos on Youtube

Nyxynyx
Author by

Nyxynyx

Hello :) I have no formal education in programming :( And I need your help! :D These days its web development: Node.js Meteor.js Python PHP Laravel Javascript / jQuery d3.js MySQL PostgreSQL MongoDB PostGIS

Updated on July 09, 2022

Comments

  • Nyxynyx
    Nyxynyx almost 2 years

    when a marker is clicked, I need to execute some code that finds the id corresponding to the marker being clicked , retrieves data from backend API, then adds the newly retrieved data to the content of the popup that will open.

    The only way that is able to listen to a click event on the marker is

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

    How can I find out which marker this is? Is it possible to add an id attribute to each marker, then retrieve this id during the popupopen event?

    • Nyxynyx
      Nyxynyx over 11 years
      leaflet.cloudmade.com/reference.html#marker A L.Marker is placed on the map: marker.addTo(map). I am able to pass an id value to each individual marker object. How should this be done, and how can I retrieve this id later during a popupopen event?
    • Nyxynyx
      Nyxynyx over 11 years
      When creating markers, I do something like var marker = new L.marker( new L.LatLng( lat, lng )); Then marker.setContent(content).addTo(map).
  • Nighto
    Nighto almost 9 years
    I'm getting undefined on e.popup._source when opening a popup that was generated by a L.geoJson() call. Any clues?
  • Nighto
    Nighto almost 9 years
    My dirty solution on the moment was to include a <div> inside the popup content on onEachFeature and then looking it up on... e.target._popup._contentNode.childNodes[0].attributes[0]. Yeah, dirty, but it works. phew
  • Léo
    Léo about 8 years
    Excellent Idea, because in my case e.popup._source was null
  • Roberto
    Roberto about 4 years
    This answer is arguable better than the accepted one, since the e.popup._source can indeed be missing, for instance if the popup was opened/closed programmatically (instead of clicking).