Avatar billede lund_dk Praktikant
10. april 2006 - 09:45 Der er 28 kommentarer og
1 løsning

Show / Hide med cookies

Er der nogen som kan hjælpe mig med et lille script,som gør det muligt at vise / skjule et layer / tabel via klik på link

og vis / skjul af layer / tabel skal gemme sig i en cookie, såleden den husker om en layerid er skjult eller vist
Avatar billede mclemens Nybegynder
10. april 2006 - 09:58 #1
Avatar billede mclemens Nybegynder
10. april 2006 - 10:06 #2
Hov, den kan jeg da lave kortere...
( Jeg var nybegynder da jeg lavede den :P )
Avatar billede lund_dk Praktikant
10. april 2006 - 10:08 #3
Jeps, den kan bruges..

Har dog lige lidt rettelser:

1. Kan jeg undgå på en måde onload i body?
2. Vil gerne at ved vis/skjul teksten, er div skjult,skal der stå vis, er div vist,skal der stå skjul



<html><head>
<script type="text/javascript">

cookiedage=1;

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

function toggle(id){
if(document.getElementById("boks"+id)){
  if(document.getElementById("boks"+id).style.display=="none")
  {document.getElementById("boks"+id).style.display="block";}
  else{document.getElementById("boks"+id).style.display="none";}
}
tekst="";boksa=1;while(document.getElementById("boks"+boksa)){
  if(document.getElementById("boks"+boksa).style.display=="none"){
  if(tekst!="")tekst=tekst+","+boksa;else tekst=boksa;}boksa++;}
document.getElementById("cookiecontent").innerHTML=tekst;
datenu=new Date();datenu.setTime(datenu.getTime()+1000*60*60*24*cookiedage);
document.cookie="name="+document.getElementById("cookiecontent").innerHTML+";expires="+datenu.toGMTString();
}
</script></head>

<body onLoad="initcook();">

<div id="cookiecontent" style="display:none;"></div>

<a onclick='toggle(1)'>Vis/Skjul</a><br />
<div id='boks1' style='display: block;'>
    <table width='200' border='0' align='center' cellpadding='0' cellspacing='0'>
        <tr bgcolor='#EEEEEE'>
            <td>
                Boks1             
            </td>
        </tr>
    </table>
</div>

<a onclick='toggle(2)'>Vis/Skjul</a><br />
<div id='boks2' style='display: block;'>
    <table width='200' border='0' align='center' cellpadding='0' cellspacing='0'>
        <tr bgcolor='#EEEEEE'>
            <td>
                Boks2             
            </td>
        </tr>
    </table>
</div>
</body></html>

<a onclick='toggle(3)'>Vis/Skjul</a><br />
<div id='boks3' style='display: block;'>
    <table width='200' border='0' align='center' cellpadding='0' cellspacing='0'>
        <tr bgcolor='#EEEEEE'>
            <td>
                Boks3             
            </td>
        </tr>
    </table>
</div>

</body></html>
Avatar billede mclemens Nybegynder
10. april 2006 - 10:52 #4
lidt mere...
2. Vil gerne at ved vis/skjul teksten, er div skjult,skal der stå vis, er div vist,skal der stå skjul
- kigger på den senere :P

<!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;

window.onload=initcook;

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

function toggle(id){
if(curn=document.getElementById("boks"+id)){
  curn.style.display=(curn.style.display=="none")?"block":"none";
}

toggletxt="";
for(boksa=1;curn=document.getElementById("boks"+boksa);boksa++){
if(curn.style.display=="none")
  toggletxt=(toggletxt!="")?toggletxt+","+boksa:boksa;}


document.getElementById("cookiecontent").data=toggletxt;
datenu=new Date();datenu.setTime(datenu.getTime()+1000*60*60*24*cookiedage);
document.cookie="name="+toggletxt+";expires="+datenu.toGMTString();
}
</script></head>

<body>

<div id="cookiecontent" style="display:none;"></div>

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

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

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

</body></html>
Avatar billede lund_dk Praktikant
10. april 2006 - 11:09 #5
Har lige sat det op, vis / skjul virker fint - det virker bare ikke som om det gemmes i en cookie.

Se http://referencer.lund.dk/startside/ klik på iconet overst i højre hjørne af en boks.
Avatar billede mclemens Nybegynder
10. april 2006 - 12:57 #6
Med det nuværende script struktur skal box'ene være
forløbende nummerede... kigger på scriptet iaften
Avatar billede mclemens Nybegynder
10. april 2006 - 14:40 #7
Nu er det uden betydning om bokse er fortløbende nummerede...
Dog skal cookiecontent indeholde en værdi ikke ingenting eller
mellemrum... bare et tegn og id på divs skal være boks+etnummer :)


<!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;

window.onload=divhs;

function divhs(dhstype){
cookc=document.getElementById("cookiecontent").childNodes.item(0);

if((document.cookie)&&(document.cookie!="name")&&(!dhstype)){
  boxr=document.cookie.replace("name=","");boxrs=boxr.split(",");
  for(boksa=0;boksa<boxrs.length;boksa++){
  if(curn=document.getElementById("boks"+boxrs[boksa]))curn.style.display="none";
  }
  cookc.data=boxrs;

}else{
  toggletxt="";

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

  curndiv=document.getElementsByTagName("div");

  for(boksa=0;boksa<curndiv.length;boksa++){
  if(curndiv[boksa].style.display=="none"){
    if(curndiv[boksa].id.indexOf("boks")>-1)toggletxt=(toggletxt!="")?toggletxt+","+curndiv[boksa].id.replace("boks",""):curndiv[boksa].id.replace("boks","");
  }
  }

  cookc.data=toggletxt;

  datenu=new Date();datenu.setTime(datenu.getTime()+1000*60*60*24*cookiedage);
  document.cookie="name="+toggletxt+";expires="+datenu.toGMTString();
}
}

</script></head>

<body>

<div id="cookiecontent" style="display:none;">none</div>

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

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

<a onclick='divhs(4)'>Vis/Skjul</a><br />
<div id='boks4' style='display: block;'>
c
</div>

</body></html>
Avatar billede lund_dk Praktikant
10. april 2006 - 14:49 #8
Er der noget bestemt med hensyn til cookie jeg bør gøre?

For nu har jeg sat det op på siden som nævt ovenover - og umiddelbart gemmes det ikke i cookie
Avatar billede mclemens Nybegynder
10. april 2006 - 17:02 #9
Kigger lige på det - goforit(); der startes via onload på body'en konflikter åbenbart med det... dykker lige ned i det script og ser hvad problemet er ;)
Avatar billede mclemens Nybegynder
10. april 2006 - 17:11 #10
Prøv dette:

<body onLoad="goforit()" >
skiftes til
<body>


samt indsættes i toppen af clock.js:

window.onload=goforit;
Avatar billede lund_dk Praktikant
10. april 2006 - 17:58 #11
Den er der næsten nu ja :)

Primært er det mine bokse helt ude til højre der fejler,prøv at åbne/lukke lidt forskelligt, og opdatere.

Er ikke lige altid de korrekte bokse åbner og lukker som de skal.

Havde samme problem med det script du skrev ind her til sidst.
Avatar billede lund_dk Praktikant
10. april 2006 - 18:02 #12
Eks lukker jeg alle bokse i højre side, så ved opdatering af siden, er Feedback åben igen.
Avatar billede mclemens Nybegynder
10. april 2006 - 18:35 #13
Hvis jeg gemmer siden lokalt med IE har jeg ingen problemer, men hvis jeg kigger på den oppe på din server har jeg samme problem som det du nævnet ...

Hvis jeg bruger firefox  virker det fint lokalt på din side virker det slet ikke???

så jeg kan ikke lige se om det her hjælper??? prøv i scriptet at skifte:

window.onload=divhs;
til:
window.onload=function(){setTimeout("divhs();",100);}
Avatar billede lund_dk Praktikant
10. april 2006 - 18:40 #14
Har prøvet i IE og firefox, samme problem.
Har prøvet lokalt hvor det er implementeret på min side, og prøvet det rå script som du skrev ind her..

fejlen er den samme alle steder,
Avatar billede mclemens Nybegynder
10. april 2006 - 18:55 #15
[ Har prøvet lokalt hvor det er implementeret på min side, og prøvet det rå script som du skrev ind her.. ]

- Hvis jeg går ind på din side i IE og siger gem siden lokalt og herefter åbner siden (tømmer så cookies og opdaterer) så virker siden lokalt på min maskine... - skal selvfølgelig siges at når jeg gemmer lokalt får jeg ikke stylesheets med så det andet script der aktiveres til styleskifte bliver ikke aktiveret...

Virker det hvis du fjerner stylesheets lokalt (prøv evt ovenstående lokale gemme metode)?

Hvis den ikke virker lokalt hos dig også kan jeg ikke se årsagen til fejlen p.t. - jo, måske det andet script der også indstiller noget i cookien???
(husk at tømme cookies mellem tests)
Avatar billede mclemens Nybegynder
10. april 2006 - 19:00 #16
joh, jeg får egentlig også styles med...
så ved jeg ikke lige hvorfor den virker her men ikke der :/
Avatar billede mclemens Nybegynder
10. april 2006 - 19:10 #17
tror jeg har fundet den nu...
- en lille fejl i mit script...
prøver på at rette den...
Avatar billede lund_dk Praktikant
10. april 2006 - 19:11 #18
ved heller ikke hvad der kan være

har prøvet forskelligt, også på anden PC, men samme resultat der også.

Har også prøvet ved at deaktivere style scriptet, samme resultat.
Avatar billede mclemens Nybegynder
10. april 2006 - 19:15 #19
Jeg tror nu det var mig der
havde glemt at tømme cookies :P
Avatar billede mclemens Nybegynder
10. april 2006 - 19:20 #20
7-9-13

cookiedage=1;

window.onload=function(){setTimeout("divhs();",100);}

function divhs(dhstype){
cookc=document.getElementById("cookiecontent").childNodes.item(0);

if((document.cookie)&&(document.cookie!="name")&&(!dhstype)){
  boxr=document.cookie.replace("name=","");boxrs=boxr.split(",");
  for(boksa=0;boksa<boxrs.length+1;boksa++){
  if(curn=document.getElementById("boks"+boxrs[boksa]))curn.style.display="none";
  }
  cookc.data=boxrs;

}else{
  toggletxt="";

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

  curndiv=document.getElementsByTagName("div");

  for(boksa=0;boksa<curndiv.length;boksa++){
  if(curndiv[boksa].style.display=="none"){
   

if(curndiv[boksa].id.indexOf("boks")>-1)toggletxt=(toggletxt!="")?toggletxt+","+curndiv[boksa].id

.replace("boks",""):curndiv[boksa].id.replace("boks","");
  }
  }

  cookc.data=toggletxt;

  datenu=new Date();datenu.setTime(datenu.getTime()+1000*60*60*24*cookiedage);
  document.cookie="name="+toggletxt+";expires="+datenu.toGMTString();
}
}
Avatar billede mclemens Nybegynder
10. april 2006 - 19:21 #21
( for(boksa=0;boksa<boxrs.length;boksa++){ ) ->
( for(boksa=0;boksa<boxrs.length+1;boksa++){ )
Avatar billede lund_dk Praktikant
10. april 2006 - 19:22 #22
Nej desværre :(
Avatar billede mclemens Nybegynder
10. april 2006 - 20:25 #23
nu har jeg det tror jeg... hvis jeg går ind på din side med firefox og kigger
under funktioner, indstillinger, privatliv, cookies, vis cookies er der en asp session cookie... tror måske det er derfor den skælder ud... kigger på om jeg kan få scriptet rettet så den tager hensyn til det :)
Avatar billede mclemens Nybegynder
10. april 2006 - 20:40 #24
er det bedre nu?... denne burde tage lidt hensyn til evt. andre cookies...


cookiedage=1;

window.onload=function(){setTimeout("divhs();",100);}

function divhs(dhstype){
cookc=document.getElementById("cookiecontent").childNodes.item(0);

if((document.cookie)&&(document.cookie!="name")&&(!dhstype)){
  boxr=""+document.cookie;
  boxr=boxr.substr(boxr.indexOf("divhs=")+6)
  boxr=boxr.substr(0,boxr.indexOf(";"));

boxrs=boxr.split(",");
  for(boksa=0;boksa<boxrs.length;boksa++){
 
if(curn=document.getElementById("boks"+boxrs[boksa]))curn.style.display="none";
  }
  cookc.data=boxrs;

}else{
  toggletxt="";

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

  curndiv=document.getElementsByTagName("div");

  for(boksa=0;boksa<curndiv.length;boksa++){
  if(curndiv[boksa].style.display=="none"){
    if(curndiv[boksa].id.indexOf("boks")>-1)toggletxt=(toggletxt!="")?toggletxt+","+curndiv[boksa].id.replace("boks",""):curndiv[boksa].id.replace("boks","");
  }
  }


if(toggletxt!=""){
  cookc.data=toggletxt;

  datenu=new Date();datenu.setTime(datenu.getTime()+1000*60*60*24*cookiedage);
  document.cookie="divhs="+toggletxt+";expires="+datenu.toGMTString();
}
}
}
Avatar billede lund_dk Praktikant
10. april 2006 - 21:07 #25
fantastisk - der var den :)
Avatar billede mclemens Nybegynder
10. april 2006 - 21:11 #26
hehe ... cookies er ikke mit speciale. Men jeg så at, der var
en cookie ekstra sat på din side ud over scriptets...
såååh... det kunne jo være efter nr. 7747 forsøg ;D
Avatar billede mclemens Nybegynder
10. april 2006 - 21:12 #27
virker også her :)
Avatar billede lund_dk Praktikant
11. april 2006 - 19:08 #28
Mange tak for hjælpen :)
Avatar billede mclemens Nybegynder
11. april 2006 - 22:16 #29
- og takker 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