webForumDet fria alternativet

visadolj med cookie + session

8 svar · 480 visningar · startad av niceform

niceformMedlem sedan dec. 20047 inlägg
#1

Hej,
jag vill att en cookie skall spara info om hur en <div> är synlig eller ej
och för dom som ej tar emot cookies skall info sparas i en session.
Nästa gång man öppnar sidan så ser det likadant ut som när man lämnade den.
Kan ni hjälpa mig plantera in denna funktion i följande script:

function visadolj(obj) {

   if(obj.style.display=='none') {
   obj.style.display='block'
   var x = 1
   }
   else {
   obj.style.display='none'
   var x = 2
   }
}
Peter SMedlem sedan dec. 20025 484 inlägg
#2

Hej och välkommen till wF!

Antag att elementet som skall gömmas har id = foo. Då

<script type="text/javascript">

window.onload = function(){
    var obj = document.getElementById("foo");

    obj.style.display = getCookie('display');
}

function getCookie(c){
    var cookies = document.cookie;

    if (cookies.indexOf(c) == -1) return "block";

    return cookies.split(c + '=')[1].replace(/(block|none).+/g, '$1');
}

function visadolj(obj){
    var obj  = document.getElementById(obj),
	st   = "",
	date = new Date();

    obj.style.display = obj.style.display == "none" ? (st = "block") : (st = "none");

    date.setFullYear(date.getFullYear() + 1);
    document.cookie = "display=" + st + "; expires=" + date.toGMTString();
}

</script>

Sessionsrelaterade frågor hör bättre hemma i något av de andra delforumen.

:)

niceformMedlem sedan dec. 20047 inlägg
#3

Tack,
men jag får det inte att fungera riktigt.
Hela min kod ser ut så här:

<head>
<script language=JavaScript>
function visadolj(obj) {

   if(obj.style.display=='none') {
   obj.style.display='block'
   var x = 1
   }
   else {
   obj.style.display='none'
   var x = 2
   }
}
</script>
</head>
<body>
Objekt nr1 <a href="javascript:visadolj(u1)"> Visa / dölj text</a><br>
<div id="u1" style="display: none">
Text om objekt
</div>
<hr>
Objekt nr2 <a href="javascript:visadolj(u2)"> Visa / dölj text</a><br>
<div id="u2" style="display: block">
Text om objekt
</div>
<hr>
</body>
Jesper TMedlem sedan nov. 20017 058 inlägg
#4

Byt ut "foo" mot det element som skall gömmas/visas (ex. "u1").
Sätt till apostrofer här: javascript:visadolj('u1')

Om du skall få detta att funka på många element så måste du nog göra på något annat sätt än det Peter S föreslog.

niceformMedlem sedan dec. 20047 inlägg
#5

Ahh....Tack,
det var ej "foo" för den bytte jag ut, men dock missat apostrofer. :r
:e Stort tack till Peter S och Jesper T.

niceformMedlem sedan dec. 20047 inlägg
#6

Om du skall få detta att funka på många element så måste du nog göra på något annat sätt än det Peter S föreslog.

Någon som har ett annat förslag? :l

niceformMedlem sedan dec. 20047 inlägg
#7

Finns det inte någon som har förslag på kod när det gäller fler element? :x

JojoxxMedlem sedan juni 20004 306 inlägg
#8

Du kan spara fler element-inställningar i samma cookie:

<script type="text/javascript">
var saveElements=["foo","bar"];

window.onload = function(){
	var p=getCookie('display').split(".");
	for(var i=0;i<p.length-1;i++){
		document.getElementById(p[i].split(":")[0]).style.display=p[i].split(":")[1];
	}
}
window.onunload = function(){
	var c=""; var date = new Date();
	date.setFullYear(date.getFullYear() + 1);
	for (var i in saveElements){
		c+=saveElements[i]+":"+document.getElementById(saveElements[i]).style.display+"."
	}
    document.cookie = "display="+escape(c)+"; expires=" + date.toGMTString();
}
function getCookie(c){
	var cookies=document.cookie.split("; ");
	for (var i in cookies){
		if(cookies[i].split("=")[0]=="display"){ return unescape(cookies[i].split("=")[1]); }
	}
	return "";
}
function visadolj(obj){
    var obj  = document.getElementById(obj);
    obj.style.display = obj.style.display == "none"?"block":"none";
}

</script>

<div id="foo" style="display:block;">foo</div>
<div id="bar" style="display:block;">bar</div>

<a href="#" onclick="visadolj('foo'); return false;"> foo</a>
<a href="#" onclick="visadolj('bar'); return false;"> bar</a>

Begräsningar

niceform skrev:

...och för dom som ej tar emot cookies skall info sparas i en session.

Även session-variabeler kräver att att du har tillgång till cookies eftersom nyckeln till session-variabeln är just en cookie. Ingen cookie, inga session-variabler.

niceformMedlem sedan dec. 20047 inlägg
#9

Snyggt Jojoxx!

Tack för hjälpen, :birp down the hatch!

Genererad på 378 ms · cache AV · v20260730165559-full.f96bc7eb