fib*_*ibi 3 javascript jquery leaflet
我在传单中的标记有问题。我的代码是这样的:
var updateMarker = function(lat, lng) {
if($('.leaflet-marker-icon').length)
marker.setLatLng([lat, lng]);
else
var marker = L.marker([lat, lng]).addTo(map);
return false;
};
var updateMarkerByInputs = function() {
return updateMarker( $('#latInput').val() , $('#lngInput').val());
}
$('#latInput').on('input', updateMarkerByInputs);
$('#lngInput').on('input', updateMarkerByInputs);
map.on('click', function(e) {
$('#latInput').val(e.latlng.lat);
$('#lngInput').val(e.latlng.lng);
updateMarker(e.latlng.lat, e.latlng.lng);
});
Run Code Online (Sandbox Code Playgroud)
如您所见,在第一次单击时将添加一个标记,在接下来的单击中应对其进行更新。但是我在第二次单击时收到此错误:
TypeError: i is undefined
..."_leaflet_id";return function(i){return i[e]=i[e]||++t,i[e]}}(),invokeEach:funct...
leaflet.js (line 6, col 603)
Run Code Online (Sandbox Code Playgroud)
我怎么了
您正在函数中marker本地定义变量updateMarker,因此一旦函数返回,引用将丢失。
在函数外定义它:
var marker;
var updateMarker = function(lat, lng) {
if($('.leaflet-marker-icon').length)
marker.setLatLng([lat, lng]);
else
marker = L.marker([lat, lng]).addTo(map);
return false;
};
Run Code Online (Sandbox Code Playgroud)
这样,您无需使用jQuery检查DOM即可确定标记是否已定义,您可以直接检查标记变量:
var marker;
var updateMarker = function(lat, lng) {
if (marker) {
marker.setLatLng([lat, lng]);
} else {
marker = L.marker([lat, lng]).addTo(map);
}
return false;
};
Run Code Online (Sandbox Code Playgroud)
(为提高可读性,我建议您在if语句中始终使用方括号。)