dodanie danych z localStorage na inną stronę

dodanie danych z localStorage na inną stronę
RI
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:11
0

Cześć, tworzę aplikację do dodawania przepisów. Na jednej ze stron (new_recipe.html) znajdują się pola do uzupełnienia (title, ingredients, preparation), z których pobieram dane do localStorage, a na innej stronie (recipes_list.html) chcę wyświetlić tytuły dodanych przepisów jako dzieci elementu recipesList, po kliknięciu przycisku showRecipesListBtn z pliku new_recipe.html. Napisałam kod jak poniżej, ale niestety nie działa. Będę wdzięczna za informację co powinnam poprawić.
Od razu zaznaczam, że jestem początkująca, więc będę wdzięczna za wyrozumiałość. ;)
Część kodu z pliku js, dołączonego do obu plików html:

Kopiuj
    // wyświetlenie przepisów z localStorage 
    function renderRecipesList() {
        let allRecipes = JSON.parse(localStorage.getItem("recipes"));

        allRecipes.forEach(function (singleRecipe) {
            let newTitle = document.createElement("li");
            newTitle.innerHTML = singleRecipe.title;
            recipesList.appendChild(newTitle);
        });
    }

    showRecipesListBtn.addEventListener("click", renderRecipesList);

Z góry bardzo dziękuję za pomoc.

edytowany 1x, ostatnio: Ritita
LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:3 minuty
  • Postów:8423
1

Napisałam kod jak poniżej, ale niestety nie działa.

Co to znaczy "nie działa"? Coś się pokazuje na ekranie? Co pokazuje konsola błędów w przeglądarce?


RI
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:11
0

Konsola wypisuje błąd, który dotyczy przycisku służącego do zapisania przepisu do localStorage, ponieważ znajduje się on tylko na stronie new_recipe.html, a przy załadowaniu szuka go też na stronie swow_recipe.html, na której go nie ma. Jest to właśnie oddzielny problem, z którym się zmagam. Czy to on blokuje działanie funkcji?

Uncaught TypeError: Cannot read property 'addEventListener' of null
at HTMLDocument.<anonymous> (new_recipe.js:112)
(anonymous) @ new_recipe.js:112

edytowany 1x, ostatnio: Ritita
.__.
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 5 lat
1

Podajesz kod do czegoś innego, masz problem z jeszcze czymś innym - zdecyduj się ;o

Kopiuj
<button onclick="myFunction()">Click me</button>

Użyj tego zamiast listenera lub zanim podepniesz listener to sprawdzaj czy button istnieje

RI
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:11
0

Sprawdzenie czy button istnieje rozwiązało ten problem, bardzo dziękuję! :)

Rzeczywiście trochę namieszałam. :P Natomiast wyświetlanie listy przepisów na innej stronie niestety dalej nie działa i konsola nie wypisuje mi błędów. Po kliknięciu przenosi mnie tylko na tę stronę, ale bez wyświetlonej listy przepisów.

Do kodu obsługującego kliknięcie buttona showRecipesListBtn również dopisałam warunek:

Kopiuj
    // wyświetlenie przepisów z localStorage 
    function renderRecipesList() {
        let allRecipes = JSON.parse(localStorage.getItem("recipes"));

        allRecipes.forEach(function (singleRecipe) {
            let newTitle = document.createElement("li");
            newTitle.innerHTML = singleRecipe.title;
            snackRecipesList.appendChild(newTitle);
        });
    }

   ** if (showRecipesListBtn) {
        showRecipesListBtn.addEventListener("click", renderRecipesList);
    }**

Button showRecipesListBtn w new_recipe.html wygląda tak:

Kopiuj
        <div>
            <a href="snack_recipes.html" id="show-recipes-btn"><strong>Pokaż listę przepisów</strong></a>
        </div>
edytowany 1x, ostatnio: Ritita
.__.
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 5 lat
2

Daj console.log na allRecipes i snackRecipesList

Jeśli pierwszy log bedzie pusty, to znaczy ze nie znajduje wartości w localstorage, natomiast kolejny powinien zwrocic element do dopisywania przepisow - odpowie nam to na pytanie czy go znajduje.

Atrybut href przenosi Cie do innej podstrony, wiec zachowanie bedzie inne niz tego oczekujesz. Zmien jego wartosc na #. A jeszcze lepiej korzystaj z <button>

Nie wiem tez czy mozna tak sobie iterowac po jsonie, ale to pozniej

RI
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:11
0

Tablicę obiektów z localStorage consola wypisuje, a przy snackRecipesList zwraca null.

Kopiuj
    function renderRecipesList() {
        let allRecipes = JSON.parse(localStorage.getItem("recipes"));

        // allRecipes.forEach(function (singleRecipe) {
        //     let newTitle = document.createElement("li");
        //     newTitle.innerHTML = singleRecipe.title;
        //     snackRecipesList.appendChild(newTitle);
        // });
        console.log(allRecipes);
        console.log(snackRecipesList);
    }

    if (showRecipesListBtn) {
        showRecipesListBtn.addEventListener("click", renderRecipesList);
    }
NO
  • Rejestracja:prawie 9 lat
  • Ostatnio:około 2 lata
  • Postów:430
1

Z tego co napisałaś nie zrobiłaś buttona tylko link więc to dość naturalne że przeniesie Cię na inną stronę. Tak działają linki ;p
Możesz zamiast

Kopiuj
<a href="snack_recipes.html" id="show-recipes-btn"><strong>Pokaż listę przepisów</strong></a>

dać:

Kopiuj
<button id="show-recipes-btn"><strong>Pokaż listę przepisów</strong></button>

(Btw lepiej zamiast strong dać css dla #show-recipes-btn)
Albo do funkcji renderRecipesList dopisać parametr, a następnie na nim wywołać event.preventDefault(); co "zablokuje" traktowanie go jako link. Ale lepiej zmienić na button imo.

RI
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:11
0

Tak, wiem, że link przenosi na inną stronę, tylko właśnie to chciałam osiągnąć. Stąd link, a nie button. Rozumiem, że nie jest możliwe dodanie danych z localStorage na inną stronę i od razu przeniesienie na nią?

.__.
  • Rejestracja:ponad 5 lat
  • Ostatnio:prawie 5 lat
1

mozna to osiagnac przy uzyciu document.ready/on load

RI
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:11
0
.__. napisał(a):

mozna to osiagnac przy uzyciu document.ready/on load

Dzięki wielkie za pomoc! :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.