Форма jQuery не скроется, а функция вернет undefined

У меня проблема с одной кнопкой. Не работает должным образом. Когда я нажимаю кнопку "Добавить", а затем кнопку "Домой", почти ничего не работает. Форма, которая создается динамически, не скрывается, ввод для поиска не отображается, а функция возвращает значение 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

Проверить консоль. У вас есть несколько ошибок

Rory McCrossan 15.12.2018 16:56

Извините, но где именно? CodePen и VS Code возвращают только undefined.

Daniel Ovári 15.12.2018 17:00
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
94
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша проблема в том, что вы неправильно инициализируете свои значения. Например, в случае 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);
}

Ты прав. Я просмотрю код и исправлю, что смогу. Спасибо за полезный совет.

Daniel Ovári 15.12.2018 17:23

@LesleyReed, пожалуйста. Вы можете принять ответ, если он решит проблему.

Lajos Arpad 15.12.2018 17:24

Привет, так ... У меня проблема с вашей функцией. Так не работает. var bookmarks = localStorage.getItem("bookmarks"); должен выглядеть как var bookmarks = JSON.parse(localStorage.getItem("bookmarks")); А затем вызвать функцию с помощью var bookmarks = getBookmarks();. Возможно ли, чтобы он был написан так, как я? Или ваша функция должна работать?

Daniel Ovári 15.12.2018 20:04

@ DanielOvári вы хотите написать свою функцию по своему желанию, чтобы соответствовать вашим потребностям. Однако ваше предложение по-прежнему предполагает, что localStorage.getItem ("закладки") вернет разумное значение, что неоправданно. Если он вернет undefined, JSON.parse выйдет из строя. Вам нужно будет убедиться, что ваша функция работает правильно, см. Мое редактирование.

Lajos Arpad 17.12.2018 11:45

Хорошо, теперь это работает. Но, к сожалению, это не решило мою проблему. В любом случае, спасибо Лайошу за попытку, по крайней мере, я узнал кое-что, о чем не знал.

Daniel Ovári 17.12.2018 13:25

@ DanielOvári, как это работает, а не решает проблему? Вы можете уточнить?

Lajos Arpad 18.12.2018 20:35

Ну, в основном ... Проблема в том, что когда я нажимаю «Добавить запуск», а затем нажимаю «Домой», ввод для поиска не отображается. $("#search").show(); не работает. Когда я обновляюсь и нажимаю «Все мои прогоны», а затем «Домой», ввод для поиска появляется, он работает. Но есть проблема. Функция в обоих случаях возвращает undefined. Я не знаю, проблема ли это в области видимости или что-то в этом роде. Все еще пытаюсь понять это. CodePen обновлен, и вы можете увидеть в консоли, что ваш совет работает (когда вы нажимаете «Все мои прогоны»). Но, к сожалению, мою первоначальную проблему это не решило.

Daniel Ovári 19.12.2018 10:24

@ DanielOvári, ваш сценарий слишком длинный для анализа, это может занять час, которого у меня, к сожалению, нет. Можете ли вы создать минимальный воспроизводимый пример?

Lajos Arpad 19.12.2018 14:24

Не могу поверить в это ... Это работает. Все. Это сделано. Я попытался урезать код, осталось только самое важное. Потом я увидел, в чем проблема. Я написал html вместо append, поэтому он не работал должным образом. Большое Вам спасибо. Ты мой спаситель. Спасибо Спасибо. Должен сказать, я многому научился.

Daniel Ovári 19.12.2018 16:02

@ DanielOvári Я рад, что проблема решена.

Lajos Arpad 20.12.2018 14:06

Другие вопросы по теме