Popup z localStorage

Popup z localStorage
M6
  • Rejestracja:prawie 9 lat
  • Ostatnio:prawie 3 lata
  • Postów:27
0

Witam
Mam poniższy skrypt (do jednokrotnego wyświetlenia okienka popup rodo), ale nie działa tzn. skrypt po przeładowaniu strony wyświetla się ponownie,
a powinien wyświetlić się tylko raz (dopóki użytkownik nie skasuje zawartości localStorage). LocalStorage zapisuje się poprawnie.
Gdzie jest błąd?

Kopiuj
<div id="klauzula_popup">
		<div>
			<div>
				<p>Szanowny Użytkowniku,</p>
			</div>
			<div id="klauzula_hide">
			 <div style="background: #0064c8; margin: 0px auto; padding: 0px 20px; border-radius: 5px; color: #ffffff; line-height: 45px; font-size: 18px; cursor: pointer;">Akceptuję</div>
			</div>
		</div>
	</div>
<script>
var wyswietlono = localStorage.getItem('klauzula');
if (wyswietlono != 'tak') {
$('#klauzula_popup').show();}

$('#klauzula_hide').click(function() {
$('#klauzula_popup').hide();
localStorage.setItem('klauzula','tak');
});
</script>
DO
  • Rejestracja:około 20 lat
  • Ostatnio:10 miesięcy
  • Lokalizacja:Zielona Góra
1

A gdzie niby ten twoj if jest zamkniety?

BTW, wersja uproszczona dziala, wiec moze masz cos z funkcja .click. W ogole tam wchodzisz?

Kopiuj
<script>
    var wyswietlono = localStorage.getItem('klauzula');
    if (wyswietlono !== 'tak') {
        let x = window.prompt('Tak czy nie');
if(x !== null) {
            localStorage.setItem('klauzula', 'tak');
        }
    }
</script>

front
edytowany 1x, ostatnio: docxxx
Haskell
Jego if jest poprawnie zamknięty, to nie jest przyczyna.
DO
Aha, faktycznie. To ja zle skopiowalem.
M6
  • Rejestracja:prawie 9 lat
  • Ostatnio:prawie 3 lata
  • Postów:27
0

Chyba jestem za słaby w js żeby Ci sensownie odpowiedzieć... Możliwe, że nie...
Na razie przerobiłem jn, ale to nadal nie działa jednorazowo.

Kopiuj
<script>
var wyswietlono = localStorage.getItem('klauzula');
if (wyswietlono != 'tak') {
$('#klauzula_popup').show();
} else {
$('#klauzula_hide').click(function() {
$('#klauzula_popup').hide();
localStorage.setItem('klauzula','tak');
})};
</script>
mar-ek1
  • Rejestracja:prawie 14 lat
  • Ostatnio:5 dni
  • Postów:525
1

A masz domyślnie ukryty ten popup? Bo z pierwszego kodu wynika, że po wejściu na stronę nie ma on nigdzie czegoś w stylu "display: none" więc jest domyślnie widoczny i w JS jeżeli masz ustawioną wartość w localStorage na "tak" to nie ukrywasz go tylko podłączasz event do przycisku w tym popupie. Więc wg ostatniego kodu albo go pokazujesz albo dodajesz event do przycisku na nim, więc jak ktoś nie miał zapisane "tak" w localStorage to przycisk mu nic nie zmieni, więc w ogóle to bez sensu.


Haskell
Nie musi mieć display:none żeby jquery.hide() zadziałał.
mar-ek1
Tak, wiem. Po prostu przy obecnym kodzie żeby to zadziałało tak jak autor oczekuje to musiałby to ustawić skoro nie ukrywa za pomocą hide(). Dlatego dopytałem czy nie robi tego np. w CSS.
Haskell
Tak, masz rację Marku. Kod html powinien być ukryty żeby wcześniejsza wersja kodu miała sens. Albo jeżeli zostawimy kod HTML tak jak jest teraz, to w if powinna być użyta funkcja hide, a nie show().
mar-ek1
Dokładnie o to chodziło w moim poście :) Chociaż bardzo go zamieszałem.
Haskell
  • Rejestracja:prawie 10 lat
  • Ostatnio:12 miesięcy
  • Postów:4700
2

Z podanego powyżej kody wynika, że nie masz importu jquery, a próbujesz się nim posługiwać. Analizując błędy w swoim kodzie zacznij od uruchomienia narzędzi programisty F12 i przeczytania komunikatu w konsoli. Jeżeli błędu w konsoli nie ma to w zakładce sources ustawiasz sobie debugger i sprawdzasz co się dzieje.

//edit - ok widzę już co się dzieje, to powinno rozwiązać problem.

Kopiuj
const wyswietlono = localStorage.getItem('klauzula');
if (wyswietlono === 'tak') {
    $('#klauzula_popup').hide();
}

$('#klauzula_hide').click(function() {
    $('#klauzula_popup').hide();
    localStorage.setItem('klauzula','tak');
});

Zaglądali do kufrów, zaglądali do waliz, nie zajrzeli do d**y - tam miałem socjalizm. Czesław Miłosz
edytowany 3x, ostatnio: Haskell
M6
  • Rejestracja:prawie 9 lat
  • Ostatnio:prawie 3 lata
  • Postów:27
0

Wielkie dzięki wszystkim za pomoc. Rozwiązanie Haskella okazało się właśnie tym poszukiwanym. Działa! :-)

edytowany 1x, ostatnio: maza66

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.