Я использовал setitem(coordinates)
на предыдущей странице, где речь шла о широте и долготе. Я хочу, чтобы на следующей странице использовался getItem()
, но только широта, но я ее не понял.
Первая страница
function storeCoordinates(location) {
const coordinates = {
lat: location.lat(),
lng: location.lng()
};
localStorage.setItem('coordinates', JSON.stringify(coordinates));
}
Следущая страница
window.onload = function () {
var lat = localStorage.getItem('coordinates.lat');
var IR = (-75 * lat) + 5025;
var energie_pro = IR * 0.926 * 0.8 * 0.213 * 1.92 * 8;
document.getElementById('eco_3000').innerText = energie_pro;
}
Вы не можете получить доступ к свойству объекта в localStorage. Вам нужно получить строку из хранилища, десериализовать ее в объект, а затем получить доступ к ее свойствам:
window.addEventListener('load', () => {
const coordinates = JSON.parse(localStorage.getItem('coordinates'));
const lat = coordinates?.lat;
if (!lat)
return;
// rest of your code...
}
Также обратите внимание на использование addEventListener()
вместо onload
и const
вместо var
в приведенном выше примере.
@mplungjan, как ни странно, у меня была такая же мысль, прежде чем я опубликовал ответ :) Я предпочитаю load
DOMContentLoaded
, так как оно более краткое и соответствует названиям других событий. Я проверил совместимость и MDN считает, что он хорошо поддерживается, поэтому для меня этого достаточно. Я знаю, что они не совсем похожи по поведению, но в 99% случаев они взаимозаменяемы.
Истинный. зафиксированный. Спасибо.
Ошибку в коде можно найти в этой строке:
var lat = localStorage.getItem('coordinates.lat');
Вы можете получить доступ к элементам локального хранилища только с помощью ключа, который вы установили, в данном случае «координаты». Улучшенная версия кода будет:
var coordinates = localStorage.getItem('coordinates');
const lat = JSON.parse(coordinates)?.lat;
👍 для дополнительной цепочки
Есть ли у вас предпочтение «загрузки» над «DOMContentLoaded» — если нет, то предпочтение
document.addEventListener('DOMContentLoaded')
передwindow.addEventListener('DOMContentLoaded')