22

イベント ハンドラを使用してマップにマーカーを追加しようとしています。これはコールバック関数で管理できますが、関数をイベント ハンドラーから分離する場合はできません。

コールバック ( http://fiddle.jshell.net/rhewitt/U6Gaa/7/ ):

map.on('click', function(e){
    var marker = new L.marker(e.latlng).addTo(map);
});

別の機能 ( http://jsfiddle.net/rhewitt/U6Gaa/6/ ):

function newMarker(e){
    var marker = new L.marker(e.latlng).addTo(map);
}
4

3 に答える 3

21

あなたのフィドルコードでは、あなたの関数は間違ったスコープにあります。独自のスコープではなく、マップ関数内に関数を移動してみてください...つまり、次の代わりに:

});

function addMarker(e){
// Add marker to map at click location; add popup window
var newMarker = new L.marker(e.latlng).addTo(map);
}

使用する

function addMarker(e){
// Add marker to map at click location; add popup window
var newMarker = new L.marker(e.latlng).addTo(map);
}
});
于 2013-08-22T19:00:47.150 に答える
12

主な問題はmap、関数内で使用するaddMarker変数が、作成したマップを格納する変数ではないことです。この問題を解決するにはいくつかの方法がありますが、最も簡単な方法は、作成したマップをmap最初の行で宣言された変数に割り当てることです。コードは次のとおりです。

var map, newMarker, markerLocation;
$(function(){
    // Initialize the map
    // This variable map is inside the scope of the jQuery function.
    // var map = L.map('map').setView([38.487, -75.641], 8);

    // Now map reference the global map declared in the first line
    map = L.map('map').setView([38.487, -75.641], 8);

    L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
        attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>',
        maxZoom: 18
    }).addTo(map);
    newMarkerGroup = new L.LayerGroup();
    map.on('click', addMarker);
});

function addMarker(e){
    // Add marker to map at click location; add popup window
    var newMarker = new L.marker(e.latlng).addTo(map);
}
于 2015-02-26T11:02:26.800 に答える
-1
var marker = L.marker([35.737448286487595, 51.39876293182373]).addTo(map);
var popup = marker.bindPopup('<b>Hello world!</b><br />I am a popup.');
于 2019-09-23T11:46:15.943 に答える