2016-06-12 10 views
1

リーフレットマップ上のクラスターアイコン(クリックしたイベント)を(Leaflet.markerclusterプラグインを使用して)追加します。イベント自体は機能しますが、アラートによって、クリックされたすべてのアイコンの配列の最後の要素が常に生成されます。理由はわかりません。配列として 'marker'を宣言しても結果は変わりません。リーフレット:クラスター化されたアイコンにクリックイベントを追加します。

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

そのための特別なイベントがあります:それはあなたのクラスタのための1つのイベントであることdocumentation

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

ノートを参照してください。したがって、あなたのループでは定義されていません。場合

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

私はあなたの質問を誤解しては、各マーカーにクリックイベントを定義したい:あなたはタイトルを表示したい場合は、あなたがそうであるように、あなたは変数を使用することはできません。このように実行する必要があります。

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タイトル)をスクリプトに送ることになっていることです。そのため、ループ内のマーカーにイベントを追加し、クラスタにはイベントを追加しませんでした。実際には同じことになります。どちらのバージョンも配列の最後の要素だけを送信します。イベントがクラスタに追加されている場合はわかりますが、イベントがマーカーに追加されている場合は表示されません。 – Mike

+0

ありがとうございます。それはまさに私が必要としていたものでした。 – Mike

関連する問題