Avatar billede ofirpeter Nybegynder
27. juli 2006 - 14:52 Der er 13 kommentarer og
1 løsning

Gem brugerens valg.

Hej, jeg bruger følgende script til at vise/skjule en liste med kategorier fra brugeren, afhængigt af hvad denne vælger:

function toggleTR(tr,btn) {
  if (tr.style.display != 'none') {
    tr.style.display = 'none';
    btn.innerHTML = '<img src="billeder/vis_kategorier.gif" border="0" alt="Vis kategorier"/>';
    }
   
  else {
    tr.style.display = '';
    btn.innerHTML = '<img src="billeder/skjul_kategorier.gif" border="0" alt="Skjul kategorier"/>';
    }
}


Jeg ønsker nu at gemme brugerens valg, således at hvis denne går væk fra siden og kommer tilbage, er kategorierne stadig sjult/vist.

Jeg har tænkt på en cookie, men kan ikke sætte / læse sådan en, nogen der kan hjælpe mig med et eksempel? Og hvordan jeg fletter det ind i mit nuværende script?
Avatar billede mrbonus Novice
27. juli 2006 - 15:21 #1
Avatar billede mclemens Nybegynder
27. juli 2006 - 18:41 #2
Avatar billede mclemens Nybegynder
27. juli 2006 - 19:09 #3
... Et par hurtige rettelser til det jeg henviste til:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

cookiedage=1;

function initcook(){
  if(document.cookie){
    boxr=document.cookie.replace("name=","");boxrs=boxr.split(",");
    for(i=0;document.getElementById("boks"+boxrs[i]);i++){
      if(tn=document.getElementById("boks"+boxrs[i]))tn.style.display="none";
    }
  }
}


function toggle(id){

  if(tn=document.getElementById("boks"+id))tn.style.display=(tn.style.display=="none")?"block":"none";

  tekst="";

  for(i=1;tn=document.getElementById("boks"+i);i++){
    if(document.getElementById("boks"+i).style.display=="none"){
      if(tekst!="")tekst=tekst+","+i;else tekst=i;
    }
  }

  document.getElementById("cookiecontent").childNodes[0].nodeValue=tekst;
  datenu=new Date();datenu.setTime(datenu.getTime()+1000*60*60*24*cookiedage);
  document.cookie="name="+document.getElementById("cookiecontent").childNodes[0].nodeValue+";expires="+datenu.toGMTString();

}

window.onload=initcook;

</script></head>

<body>

<div id="cookiecontent" style="display:block;">&nbsp;</div>

<a onclick='toggle(1)'>Vis/Skjul</a><br />
<div id='boks1' style='display: block;'>
Boks1
</div>

<a onclick='toggle(2)'>Vis/Skjul</a><br />
<div id='boks2' style='display: block;'>
Boks2
</div>
</body></html>

<a onclick='toggle(3)'>Vis/Skjul</a><br />
<div id='boks3' style='display: block;'>
Boks3
</div>

</body></html>
Avatar billede mclemens Nybegynder
27. juli 2006 - 19:09 #4
Ups <div id="cookiecontent" style="display:block;">&nbsp;</div>
skulle være <div id="cookiecontent" style="display:none;">&nbsp;</div>
Avatar billede mclemens Nybegynder
27. juli 2006 - 19:22 #5
Denne funktion kunne også forkortes en ekstra tand:

function initcook(){
  if(document.cookie){
    boxr=document.cookie.replace("name=","");boxrs=boxr.split(",");
    for(i=0;tn=document.getElementById("boks"+boxrs[i]);i++)tn.style.display="none";
  }
}
Avatar billede mclemens Nybegynder
27. juli 2006 - 21:56 #6
[ Og hvordan jeg fletter det ind i mit nuværende script? ]
- Ups, sorry ... muligvis (afhængig af hvordan scriptet
egentlig kaldes / bruges ) kan det implementeres såden her:


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

cookiedage=1;

function toggleTR(tr,btn) {
  datenu=new Date();datenu.setTime(datenu.getTime()+1000*60*60*24*cookiedage);
  if (tr.style.display != 'none') {
    tr.style.display = 'none';
    btn.innerHTML = '<img src="billeder/vis_kategorier.gif" border="0" alt="Vis kategorier" onclick="toggleTR(tr,btn);" />';
    document.cookie="name=0;expires="+datenu.toGMTString();
    }
 
  else {
    tr.style.display = '';
    btn.innerHTML = '<img src="billeder/skjul_kategorier.gif" border="0" alt="Skjul kategorier"  onclick="toggleTR(tr,btn);" />';
    document.cookie="name=1;expires="+datenu.toGMTString();
    }
}


window.onload=function(){
  if((document.cookie)&&(document.cookie.indexOf("name=0")!=-1))toggleTR(tr,btn);
}

</script>

</head><body>
<div id="btn"><img src="billeder/skjul_kategorier.gif" border="0" alt="Skjul kategorier" onclick="toggleTR(tr,btn);" /></div>
<div id="tr">Kategorier</div>
</body></html>




... men hvis det kun fungerer som
ovenstående kan det også gøres sådan her:



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta

http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

<script type="text/javascript">

var cookiedage=1,btn,tr;

function toggleTR() {
  datenu=new Date();datenu.setTime(datenu.getTime()+1000*60*60*24*cookiedage);
  if (tr.style.display != 'none') {
    tr.style.display = 'none';
    btn.alt="Vis kategorier";
    btn.src="billeder/vis_kategorier.gif";
    document.cookie="name=0;expires="+datenu.toGMTString();
    }
 
  else {
    tr.style.display = '';
    btn.alt="Skjul kategorier";
    btn.src="billeder/skjul_kategorier.gif";
    document.cookie="name=1;expires="+datenu.toGMTString();
    }
}


window.onload=function(){
  btn=document.getElementById("btn");tr=document.getElementById("tr");
  if((document.cookie)&&(document.cookie.indexOf("name=0")!=-1))toggleTR();
}

</script>

</head><body>
<img id="btn" src="billeder/skjul_kategorier.gif" border="0" alt="Skjul kategorier" onclick="toggleTR(tr,btn);" />
<div id="tr">Kategorier</div>
</body></html>
Avatar billede ofirpeter Nybegynder
28. juli 2006 - 12:26 #7
Hej :) Det virker umeldbart fint, dog synes jeg det er ukønt at den først fjerner kategorierne efter siden er loadet, således at man kan se kategorierne forsvinde, hvis siden har en del indhold.
Avatar billede mclemens Nybegynder
28. juli 2006 - 12:40 #8
Ok :o) ... du kan placere scritet lige efter elementet er indlæst som her...
(elementet skal være klar i dom før elementet kan behandles...)



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="content-type" content="text/html; charset=iso-8859-1"><title>Ingen titel</title>

</head><body>
<img id="btn" src="billeder/skjul_kategorier.gif" border="0" alt="Skjul kategorier" onclick="toggleTR(tr,btn);" />
<div id="tr">Kategorier</div><script type="text/javascript">
var cookiedage=1,btn,tr;

function toggleTR() {
  datenu=new Date();datenu.setTime(datenu.getTime()+1000*60*60*24*cookiedage);
  if (tr.style.display != 'none') {
    tr.style.display = 'none';
    btn.alt="Vis kategorier";
    btn.src="billeder/vis_kategorier.gif";
    document.cookie="name=0;expires="+datenu.toGMTString();
    }

  else {
    tr.style.display = '';
    btn.alt="Skjul kategorier";
    btn.src="billeder/skjul_kategorier.gif";
    document.cookie="name=1;expires="+datenu.toGMTString();
    }
}

  btn=document.getElementById("btn");tr=document.getElementById("tr");
  if((document.cookie)&&(document.cookie.indexOf("name=0")!=-1))toggleTR();
</script>

</body></html>
Avatar billede ofirpeter Nybegynder
28. juli 2006 - 12:51 #9
Smart, det virker fint på næsten alle mine sider. Men jeg har en side hvor jeg stadig kan se den kigge frem. Siden er også fuld af formularer og indkludere andre sider osv. Men burde den ikke stadig loade det hele først, som du sagde i den tidligere besked?
Avatar billede mclemens Nybegynder
28. juli 2006 - 13:48 #10
Nej, ikke i den sidste udgave - der burde
den komme så hurtigt som den kan?

... script delen skal være placeret lige efter
div'en... (ikke lige før afslutning af filen)
- har du et link til siden? (er på vej ud af
døren og er først tilbage iaften ... )
Avatar billede ofirpeter Nybegynder
31. juli 2006 - 12:15 #11
Hej, undskyld jeg lige har været  fraværende. Det betyder ikke at jeg ikke vil have hjælp :) Du kan se siden her http://www.j-act-events.dk/ (billeder er der pt ikke, men du kan bare trykke på krydset der skulle have været billedet).
Hvis du trykker opdater ser du at menu forsvinder for øjnene af dig.
Avatar billede mclemens Nybegynder
31. juli 2006 - 12:25 #12
Tjoh du har ikke rettet scriptet til 28/07-2006 12:40:50...
- du har stadig en window.onload rundt om denne her:

window.onload=function(){
  btn=document.getElementById("btn");tr=document.getElementById("tr");
  if((document.cookie)&&(document.cookie.indexOf("name=0")!=-1))toggleTR();
}

det skal se sådan her ud:

<div id="tr">
<table id="menu" width="799" height="20" border="0" cellpadding="0" cellspacing="0">
  <!--DWLayoutTable-->
<tr>
<td width='30' height='20' valign="top" bgcolor="#DBDBDB"><!--DWLayoutEmptyCell-->&nbsp;</td>
<td width='740' valign='top' bgcolor="#DBDBDB">
<table width="100%" border="0" cellpadding="0" cellspacing="0" ><br />
<tr></tr><tr><td width='192' height='15' valign='top'>Biler & Tilbehør</td><td width='192' height='15' valign='top'>MC, Scooter & Knallert</td><td width='192' height='15' valign='top'>Bolig & Have</td><td width='192' height='15' valign='top'>Hobby & Fritid</td></tr><tr><td width='192' height='15' valign='top'>Computer & Telefoni</td><td width='192' height='15' valign='top'>Billede & Lyd</td><td width='192' height='15' valign='top'>Dyr & Tilbehør</td><td width='192' height='15' valign='top'>Dig & Dine børn</td></tr><tr><td width='192' height='15' valign='top'>Studiebøger & Litteratur</td><td width='192' height='15' valign='top'>Ferie & Forlystelser</td><td width='192' height='15' valign='top'>Erhverv & Arbejde</td><td width='192' height='15' valign='top'>Diverse</td></tr><tr><td><br></td></tr></table></td>

<td width='29' valign="top" bgcolor="#DBDBDB"><!--DWLayoutEmptyCell-->&nbsp;</td>
</tr>
</table></div>
<div id="vis_skjul" align="right"><img id="btn" src="billeder/skjul_kategorier.gif" border="0" alt="Skjul kategorier" onClick="toggleTR(tr,btn);" /></div>
<script type="text/javascript">
var cookiedage=1,btn,tr;

function toggleTR() {
  datenu=new Date();datenu.setTime(datenu.getTime()+1000*60*60*24*cookiedage);
  if (tr.style.display != 'none') {
    tr.style.display = 'none';
    btn.alt="Vis kategorier";
    btn.src="billeder/vis_kategorier.gif";
    document.cookie="name=0;expires="+datenu.toGMTString();
    }
 
  else {
    tr.style.display = '';
    btn.alt="Skjul kategorier";
    btn.src="billeder/skjul_kategorier.gif";
    document.cookie="name=1;expires="+datenu.toGMTString();
    }
}


  btn=document.getElementById("btn");tr=document.getElementById("tr");
  if((document.cookie)&&(document.cookie.indexOf("name=0")!=-1))toggleTR();
</script>





... bemærk vis/skjul er også rykket en tand op
Avatar billede ofirpeter Nybegynder
31. juli 2006 - 12:52 #13
Sorry, det er mig der ikke har været vågen nok. Mange tak for hjælpen mclemens, fantastisk at få det til at virke!
Avatar billede mclemens Nybegynder
31. juli 2006 - 12:56 #14
- Helt ok :)
- Velbekom ;)
Tak for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester