JavaScript

LocalStorage в js

Функция берет данные из формы, состоящей из 2 строк метод оплаты и количество денег и сохраняет в локал сторейдж

function Savetransaction() {
let amount = parseFloat(document.getElementById('amount').value,10);
let paymentMethodID = document.getElementById('paymentMethod').value;
console.log("Amount : " +amount+ ` , idPayment : ${paymentMethodID}`);
if (localStorage.getItem('transaction') !== null) {
let transactionListString = localStorage.getItem('transaction');
let transactionList = JSON.parse(transactionListString);
}
else{
let transactionList = new Array();
}
let newTransactionString = `{"transactionAmount": "${amoubt}", "idPayment" : "${paymentMethodID}"}`;
let newTransactionJSON = JSON.parse(newTransactionString);
console.log(newTransactionString);
console.log(newTransactionJSON);
transactionList.push(newTransactionJSON);
localStorage.setItem("transaction", JSON.stringify(transactionList));

}
Проблема здесь
 if (localStorage.getItem('transaction') !== null) { 
let transactionListString = localStorage.getItem('transaction');
let transactionList = JSON.parse(transactionListString);
}
else {
let transactionList = new Array();
}
Все переменные объявленные внутри блока остаются внутри блока. Если надо чтобы они были видны за пределами 'if', объяви их за пределами if.
https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Statements/block#правила_области_видимости_блока (пункт Правила области видимости блока)

Вот более упрощенный вариант:
 function Savetransaction() { 
const amount = parseFloat(document.getElementById('amount').value, 10);
const paymentMethodID = document.getElementById('paymentMethod').value;

console.log("Amount : " + amount + ` , idPayment : ${paymentMethodID}`);

const transactionListString = localStorage.getItem('transaction');

const transactionList = transactionListString ? JSON.parse(transactionListString) : [];

const newTransaction = {transactionAmount: amount, idPayment: paymentMethodID};

console.log(newTransaction);

transactionList.push(newTransaction);
localStorage.setItem("transaction", JSON.stringify(transactionList));
}
На строке с newTransactionString у тебя опечатка + убрано лишнее действие с обработкой строки json. Преобразовать строку в объект и потом обратно в строку в данном случае излишне. :)
АS
Артём Sоlоpоff
23 960
Лучший ответ
 function Savetransaction() { 
// Переменная не была объявлена в области видимости функции
let transactionList = '';
let amount = parseFloat(document.getElementById('amount').value,10);
let paymentMethodID = document.getElementById('paymentMethod').value;
console.log("Amount : " +amount+ ` , idPayment : ${paymentMethodID}`);
if (localStorage.getItem('transaction') !== null) {
let transactionListString = localStorage.getItem('transaction');
transactionList = JSON.parse(transactionListString);
}
else{
transactionList = new Array();
}
// Была допущена ошибка в переменной amount
let newTransactionString = `{"transactionAmount": ${amount}, "idPayment" : ${paymentMethodID}}`;
let newTransactionJSON = JSON.parse(newTransactionString);
console.log(newTransactionString);
console.log(newTransactionJSON);
transactionList.push(newTransactionJSON);
localStorage.setItem("transaction", JSON.stringify(transactionList));
}
Нажми F12, введи в консоль localStorage и посмотри, что в нём сохранено.
Александр Гой
Александр Гой
97 257
Сергей Сорокин В этом и едло, что ничего не появилось
Да
Сергей Сорокин Но ничего не появляется, целый день пытаюсь исправить