2016-06-12 34 views
1

我想爲傳單地圖上的(隨後)聚類圖標添加一個單擊事件(使用Leaflet.markercluster插件)。事件本身起作用,但警報總是會爲每個被點擊的圖標產生數組的最後一個元素。我看不出原因。聲明'marker'爲數組不會改變結果。Leaflet:將單擊事件添加到聚類圖標

map.clearLayers; 

    var marker = []; 

    var markers = L.markerClusterGroup({ 
     disableClusteringAtZoom: 10, 
     spiderfyOnMaxZoom: true, 
     chunkedLoading: true 
    }); 

    for (id in reclist) {  
     var posn = reclist[id]['info'][1]; 
     var pose = reclist[id]['info'][2]; 
     var title = reclist[id]['info'][0]; 
     var mapicon = L.icon({iconUrl: 'url of icon'); 

     marker[id] = new L.marker(new L.LatLng(posn, pose), {icon: mapicon}) 
     .on('click', function(){alert(title)}); 

     markers.addLayer(marker[id]); 

    } 

    map.addLayer(markers); 

回答

1

有針對特殊事件:看到documentation

markers.on('clusterclick', function() {}); 

注意這是集羣一個事件。所以它沒有在你的循環中定義。

var markers = L.markerClusterGroup({ ... }); 
markers.on('clusterclick', function() { ... }); 
for (id in reclist) { ... } 

如果我誤解了你的問題,你要定義一個click事件每個標記:如果要顯示的標題,你做你不能使用變量。應該這樣做:

var title = reclist[id]['info'][0]; 
var marker = new L.marker(new L.LatLng(posn, pose), {icon: mapicon}); 
marker.title = title; 
marker.on('click', function(e){alert(e.target.title)}); 

這裏是一個example

+0

謝謝您的答覆。我最初在文檔中遵循了這個例子。問題是,每個標記都應該發送它的個人id(var title)給腳本。這就是爲什麼我將事件添加到循環中的標記而不是羣集中的原因。實際上,這相當於同一件事:兩個版本只發送數組的最後一個元素。如果將事件添加到羣集中,這是可以理解的,但是如果將事件添加到標記中,則不是這樣。 – Mike

+0

非常感謝。這正是我所需要的。 – Mike

相關問題