我觀察訪問者位置並將當前座標存儲在兩個變量latitude
和longitude
中。當訪問者點擊地圖時,新標記的座標將被存儲在另外兩個變量click_latitude
和click_longitude
中。全局變量不是全局的 - 僅在函數內
完成此操作後,我想在文本中以.test
的範圍顯示標記的座標。問題是coordinates_click
(其中包含click_latitude
和click_longitude
)總是空的!標記的座標只存儲在map.on('click', function(e1) { ... }
中的變量中,並且不能在函數外部訪問。
爲什麼以及如何解決這個問題?
if(navigator.geolocation) {
// VARIABLES
var gps_timeout = 10 * 1000 * 1000;
// MAP
map = L.map('map', {
maxZoom: 17,
minZoom: 7
}).setView([59.380767, 13.503022], 13);
// MAP (copyright)
L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
attribution: 'Map data © OpenStreetMap contributors'
}).addTo(map);
// GPS
navigator.geolocation.watchPosition(success, error, {
enableHighAccuracy: true,
timeout: gps_timeout,
maximumAge: 0
});
// ADD MARKER
map.on('click', function(e1) {
// IF
if(typeof(marker) === 'undefined') {
marker = new L.marker(e1.latlng).addTo(map);
var position = marker.getLatLng();
var click_latitude = position.lat.toFixed(6);
var click_longitude = position.lng.toFixed(6);
map.panTo(new L.LatLng(click_latitude, click_longitude));
// IF
} else {
marker.setLatLng(e1.latlng);
var position = marker.getLatLng();
var click_latitude = position.lat.toFixed(6);
var click_longitude = position.lng.toFixed(6);
map.panTo(new L.LatLng(click_latitude, click_longitude));
}
});
// IF
} else {
// error handler
}
function success(position) {
// VARIABLES
latitude = position.coords.latitude.toFixed(6);
longitude = position.coords.longitude.toFixed(6);
coordinates_current = latitude + ',' + longitude;
coordinates_click = window.click_latitude + ',' + window.click_longitude;
// IF
if(coordinates_click !== '') {
$('.test').text(coordinates_click);
}
}
如果您想嘗試,請轉至https://erik-edgren.nu/map。 上面的代碼更新爲當前代碼。請參閱下面的答案。
您可以在函數之外全局聲明'click_'變量。然後,從你的函數中刪除'var click_'。或者,使用'window.click_ = ...'從函數中訪問它們。 – randomir
好的。我在'var gps_timeout = ...'下面加了'click_latitude,click_longitude',並且得到了這個錯誤信息:'Uncaught ReferenceError:click_latitude未定義' – Erik
在哪一行?你使用什麼環境/瀏覽器?你有沒有試過通過'window'訪問它們? – randomir