Есть два места, где вы используете location.assign()
, что позволяет перейти на новую страницу.
Полагаю, это срабатывает:
if (expense === undefined) {
location.assign('expense-edit.html')
}
expense
не определено, поэтому страница перезагружается; expense
не определено, поэтому страница снова перезагружается ...
Выясните, почему expense
не имеет значения. (Вы также можете просто закомментировать эти строки, чтобы подтвердить, что это, по сути, проблема.)
обновление: Кроме того, я думаю, что вы предполагаете, что переменные (например, массив expenses
) сохраняются при загрузке страницы. Переменные JS не сохраняются при загрузке страницы. После вызова location.assign()
, все переменные JS сброшены.
Итак, эта часть кода ничего не делает:
expenses.push({
id: id,
title: '',
body: ''
})
Я не был уверен, что происходит в getSavedExpenses()
, и подумал, что, возможно, переменные были сохранены там через localstorage или что-то еще. (В противном случае это, вероятно, также мертвый код, поскольку его возвращаемое значение даже не используется.)
Существует два способа сохранения данных при «загрузке страницы»:
- Сохраните данные в постоянном хранилище, таком как база данных или локальное хранилище. Затем перезагрузите данные при следующей загрузке страницы. Если используется база данных, обычно данные из формы отправляются через запрос API на сервер базы данных.
- Не перезагружать страницу; изменить страницу DOM через JS (чтобы она выглядела как страница "перезагрузка")
обновление 2:
TypeError: Невозможно установить для свойства 'value' значение null
Эта ошибка вызвана попыткой доступа к свойству с именем value
для переменной со значением null
. В вашем коде это происходит в двух местах:
titleElement.value = expense.title
bodyElement.value = expense.body
После возникновения ошибки JS прекращает выполнение. Вероятно, это причина того, что localStorage.getItem('expenses')
приводит к нулю.