gpt4 book ai didi

javascript - 更新传单中的标记

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:02:46 24 4
gpt4 key购买 nike

我对传单中的标记有疑问。我的代码是这样的:

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);
});

如您所见,在第一次点击时将添加一个标记,在接下来的点击中它应该被更新。但是我在第二次点击时收到此错误:

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)

我做错了什么?

最佳答案

您正在 updateMarker 函数中本地定义您的 marker 变量,因此一旦函数返回,引用就会丢失。

在函数外定义:

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;
};

这样你就不需要用 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;
};

(为了提高可读性,我建议始终在 if 语句中使用方括号。)

关于javascript - 更新传单中的标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32421976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com