Jquery ustrzymanie stanu toggle po odświeżeniu


(stanek.94) #1

Witam! Mam skrypt rozwijający diva wiecej po kliknięciu wiecejbutton , lecz po odświeżeniu strony nie zapamietuje że był rozwinięty. Kod wyglada tak:

$(document).ready(function() 

					{


						$("div#wiecejbutton").click(function () 

						{						

						$("div#wiecej").toggle("slow");

						if($("span#wiecejtekst").text()=="Mniej opcji")

							{

							    $("span#wiecejtekst").text("Więcej opcji");

							}

							else

							{

							     $("span#wiecejtekst").text("Mniej opcji");

							}

						});

					});

Próbowałem to zmienić w taki sposób, ale nie dziala. gdzie jest błąd?

$(document).ready(function() 

					{

					var openToggle = getCookie("open") || false;

					if ( openToggle )

					    $("div#wiecej").show();

					else

					    $("div#wiecej").hide();


						$("div#wiecejbutton").click(function () 

						{

						 var closed = $("div#wiecej").is(":hidden");

						    if ( closed )

						       {

							       $("div#wiecej").toggle("slow");

								if($("span#wiecejtekst").text()=="Mniej opcji")

								{

								    $("span#wiecejtekst").text("Więcej opcji");

								}

								else

								{

								     $("span#wiecejtekst").text("Mniej opcji");

								}

							}

						    else

							$("div#wiecej").hide();

						    setCookie("open", !closed, 365 );


						});

					});

(Drobok) #2

Jeśli to twój cały js, to używasz nieistniejących funkcji. Jeśli nie, podaj kod funkcji z których korzystasz (możesz tam mieć błędy).

sth || false <- bez sensu, bo to to samo co sth

O ile twój pierwszy kod jest ok, to drugi całkowicie przeczy temu pierwszemu (wszystko co dołożyłeś to błąd) :slight_smile:

Twój kod powinien się sprowadzić

jeśli ciastko 1 to click, a click zmienia ciastko na 1 lub 0 (przy zmianie napisu)


(stanek.94) #3

No właśnie coś z tym jquery cookie mi nie działa :confused: A podlinkowane jest dobrze…

A dało by się to jakoś zrobić bez ciastek?


(Konrad Kosowski) #4

Pokaż funkcję getCookie i setCookie. Czy tych divów może być więcej niż jeden na stronie?


(stanek.94) #5

Cookies brałem z tego pluginu : https://github.com/carhartl/jquery-cookie

Takie divy są jedyne


(Konrad Kosowski) #6

Na pewno? Bo widzisz… w linku, który podałeś cookie pobiera się tak:

$.cookie(‘open’);

a ty to robisz tak:

getCookie(“open”)

natomiast ustawia się tak:

$.cookie(‘open’, ‘!closed’, { expires: 365 });

a ty ustawiasz tak:

setCookie(“open”, !closed, 365 );

Więc… coś jakby jest nie tak, nie uważasz?


(stanek.94) #7

Nawet po zmianie to nic nie daje :confused: W ogóle nie działa plugin. Rozpakował się katalog “jquery-cookie-master” i linkuję go w ten sposób

Niestety nawet przy dodaniu do jakiegokolwiek skryptu

$.cookie('the_cookie', 'the_value');

to to nie działa :confused:

Dodane 14.09.2013 (So) 9:57

A bez tych ciastek z jquery się nie da tego jakoś zrobić?


(Drobok) #8

Musisz gdzieś mieć zapisaną zmienną, sesja / baza / ciastko innego wyjścia nie ma.

Co do samego linkowania, jeśli masz indeks w folderze gdzie masz folder z pluginem to linkujesz tak:

./jquery-cookie-master/jquery.cookie.js

Jeśli nie podaj strukturę katalogów. Swoją drogą dlaczego uważasz że nie działa ? :stuck_out_tongue:

Podaj cały kod / link do strony.

Dodane 14.09.2013 (So) 10:52

Wrzuć do document ready:

$.cookie('the_cookie', 'costam');

alert($.cookie('the_cookie'));

Jeśli dostaniesz alert costam to działa, jeśli nie sprawdź konsolę js, lub daj to co chciałem wyżej


(stanek.94) #9

Mam katalog Strona a w nim plik index.php oraz katalog jquery-cookie-master

Ten kod który podałeś właśnie nie działa :confused:

Całego kodu nie mam jak podać bo to jest ponad 300 linijek


(Konrad Kosowski) #10

To może by link do strony?


(stanek.94) #11

Też nie mam jak bo serwer na razie stawiam tylko lokalnie

Tutaj kod index.php : http://jsbin.com/UmIjOFa/2/edit?html,output


(Drobok) #12

Masz cookie/jquery.cookie.js a nie jquery-cookie-master/jquery.cookie.js


(stanek.94) #13

Zmieniłem ale to też nie działa…


(Konrad Kosowski) #14

Odpal firebuga i sprawdź konsolę i sieć, czy aby wszystko ładuje się jak trzeba…