2013-09-02 19 views
11

私が取り組んでいる小規模なプロジェクトでは、リーフレットにマーカーを置くことができなければなりません.js電動イメージマップとこのマーカーの位置を更新する、もしそれが引っ張られれば。これを試すには次のコードを使用しますが、失敗します。 「マーカーが定義されていません」というエラーが表示されます。なぜそれが動作していないのかわからない - 多分あなたたちは私を助けることができる? ;)leaflet.js - クリック時のマーカの設定、ドラッグ時の位置の更新

function onMapClick(e) { 
    gib_uni(); 
    marker = new L.marker(e.latlng, {id:uni, icon:redIcon, draggable:'true'}; 
    map.addLayer(marker); 
}; 

marker.on('dragend', function(event){ 
    var marker = event.target; 
    var position = marker.getLatLng(); 
    alert(position); 
    marker.setLatLng([position],{id:uni,draggable:'true'}).bindPopup(position).update(); 
}); 

答えて

23

上記のコードスニペットでは、イベントハンドラが追加された時点でマーカーが定義されていません。 dragendイベントリスナーは、マーカーの作成直後に追加された場合、以下を試してみてください。

function onMapClick(e) { 
    gib_uni(); 
    marker = new L.marker(e.latlng, {id:uni, icon:redIcon, draggable:'true'}); 
    marker.on('dragend', function(event){ 
      var marker = event.target; 
      var position = marker.getLatLng(); 
      console.log(position); 
      marker.setLatLng(position,{id:uni,draggable:'true'}).bindPopup(position).update(); 
    }); 
    map.addLayer(marker); 
}; 

あなたはまた、あなたの新しいL.Marker()行の最後にブラケットを欠落していました。

また、setLatLngの呼び出しでpositionを配列に配置しますが、それはすでにLatLngオブジェクトです。

+0

今夜、私はほぼ同じ解決策を思いつきました。 :-) ありがとうございました! – kirijanker

+1

あなたが使用していたバージョンはDunnoですが、現在marker.setLatLng([position]、...)の代わりに 'marker.setLatLng([position.lat、position.lng]、...')です – zatziky

+0

正しい使用法の答え。作者は 'getLatLng()'の出力である 'LatLng'オブジェクトであり、リーフレットのドキュメントごとに' setLatLng() 'への入力であるため、 'position'を配列に入れる必要はありません:http://leafletjs.com/reference.html#marker – nothingisnecessary

関連する問題