У меня проблема с одной кнопкой. Не работает должным образом. Когда я нажимаю кнопку "Добавить", а затем кнопку "Домой", почти ничего не работает. Форма, которая создается динамически, не скрывается, ввод для поиска не отображается, а функция возвращает значение undefined.
$("#home").on("click", function () {
$("#search").show();
$("#addForm").hide();
$("#noPrevious").hide();
complete()
console.info(complete())
});
Но с другой стороны, некоторые вещи работают, они скрываются или показываются. Например, после обновления, когда я нажимаю «Все мои запуски», отображается текст, который будет скрыт после нажатия кнопки «Домой», и, кроме того, появится поле ввода для поиска. Я этого не понимаю. Кто-нибудь знает, что случилось?
Заранее спасибо.
Вот CodePen и GitHub. Проблема находится в верхней части файла .js.
https://codepen.io/ovy1448/pen/gZrKOX
https://github.com/ovy1448/MyRun/blob/master/js/main.js
Извините, но где именно? CodePen и VS Code возвращают только undefined.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Ваша проблема в том, что вы неправильно инициализируете свои значения. Например, в случае bookmarks ваш код предполагает, что localStorage имеет значение с этим ключом. Однако это не всегда так. Вам потребуется значение по умолчанию для bookmarks. Здесь может пригодиться помощник function:
function getBookmarks() {
var bookmarks = localStorage.getItem("bookmarks");
if (!bookmarks) bookmarks = [];
return bookmarks;
}
а затем замените все вхождения localStorage.getItem("bookmarks") на getBookMarks() в своем коде, кроме одного в функции выше. Обратите внимание и на другие инициализации.
РЕДАКТИРОВАТЬ
Если вы хотите проанализировать JSON внутри функции, вы можете сделать это так:
function getBookmarks() {
var bookmarks = localStorage.getItem("bookmarks");
if (!bookmarks) return [];
return JSON.parse(bookmarks);
}
Ты прав. Я просмотрю код и исправлю, что смогу. Спасибо за полезный совет.
@LesleyReed, пожалуйста. Вы можете принять ответ, если он решит проблему.
Привет, так ... У меня проблема с вашей функцией. Так не работает. var bookmarks = localStorage.getItem("bookmarks"); должен выглядеть как var bookmarks = JSON.parse(localStorage.getItem("bookmarks")); А затем вызвать функцию с помощью var bookmarks = getBookmarks();. Возможно ли, чтобы он был написан так, как я? Или ваша функция должна работать?
@ DanielOvári вы хотите написать свою функцию по своему желанию, чтобы соответствовать вашим потребностям. Однако ваше предложение по-прежнему предполагает, что localStorage.getItem ("закладки") вернет разумное значение, что неоправданно. Если он вернет undefined, JSON.parse выйдет из строя. Вам нужно будет убедиться, что ваша функция работает правильно, см. Мое редактирование.
Хорошо, теперь это работает. Но, к сожалению, это не решило мою проблему. В любом случае, спасибо Лайошу за попытку, по крайней мере, я узнал кое-что, о чем не знал.
@ DanielOvári, как это работает, а не решает проблему? Вы можете уточнить?
Ну, в основном ... Проблема в том, что когда я нажимаю «Добавить запуск», а затем нажимаю «Домой», ввод для поиска не отображается. $("#search").show(); не работает. Когда я обновляюсь и нажимаю «Все мои прогоны», а затем «Домой», ввод для поиска появляется, он работает. Но есть проблема. Функция в обоих случаях возвращает undefined. Я не знаю, проблема ли это в области видимости или что-то в этом роде. Все еще пытаюсь понять это. CodePen обновлен, и вы можете увидеть в консоли, что ваш совет работает (когда вы нажимаете «Все мои прогоны»). Но, к сожалению, мою первоначальную проблему это не решило.
@ DanielOvári, ваш сценарий слишком длинный для анализа, это может занять час, которого у меня, к сожалению, нет. Можете ли вы создать минимальный воспроизводимый пример?
Не могу поверить в это ... Это работает. Все. Это сделано. Я попытался урезать код, осталось только самое важное. Потом я увидел, в чем проблема. Я написал html вместо append, поэтому он не работал должным образом. Большое Вам спасибо. Ты мой спаситель. Спасибо Спасибо. Должен сказать, я многому научился.
@ DanielOvári Я рад, что проблема решена.
Проверить консоль. У вас есть несколько ошибок