Search code examples
javascriptpopupopenlayersmarkers

Openlayers markers click events on multiple markers


I am loading multiple markers dynamically and adding them to a Markers layer. The problem is that when I click on any marker, the same popup appears on the last added marker.

var markers = new OpenLayers.Layer.Markers("Markers");

    for(var i = 0; i < listd.length; i++)
    { 
        var lonLat = new OpenLayers.LonLat(listd[i].Longitude, listd[i].Latitude);

        var title = listd[i].Title;
        var iconPath = listd[i].IconPath;
        var size = new OpenLayers.Size(15, 22);
        var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h);

        var icon = new OpenLayers.Icon(iconPath, size, offset);
        var marker = new OpenLayers.Marker(lonLat, icon.clone());

        markers.addMarker(marker);

        marker.events.register("click", marker, function(e){
            popup = new OpenLayers.Popup.FramedCloud("chicken",
                marker.lonlat,
                new OpenLayers.Size(200, 200),
                title,
                null, false );

            map.addPopup(popup);
        });
     } 
     map.addLayer(markers);

What am i missing ?


Solution

  • What about when you try this ??? Update New Gmap url with label in icon :3: http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=[label]|[Pin Color]|[label color]

    http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=1|FE6256|000000

    more info: https://developers.google.com/chart/

    Update

     var markers = new OpenLayers.Layer.Markers("Markers");
    
    for(var i = 0; i < listd.length; i++)
    { 
        (function(i){
             var lonLat = new OpenLayers.LonLat(listd[i].Longitude, listd[i].Latitude);
    
             var title = listd[i].Title;
             var iconPath = listd[i].IconPath;
             var size = new OpenLayers.Size(15, 22);
             var offset = new OpenLayers.Pixel(-(size.w / 2), -size.h);
    
             var icon = new OpenLayers.Icon(iconPath, size, offset);
             var marker = new OpenLayers.Marker(lonLat, icon.clone());
    
             markers.addMarker(marker);
    
            marker.events.register("click", marker, function(e){
                popup = new OpenLayers.Popup.FramedCloud("chicken",
                    marker.lonlat,
                    new OpenLayers.Size(200, 200),
                    title,
                    null, false );
                  map.addPopup(popup);
             });
        })(i);
     } 
     map.addLayer(markers);