Avatar billede bongo20 Nybegynder
04. december 2003 - 11:35 Der er 14 kommentarer og
1 løsning

bevare menu udseende

Jeg har lavet en menu ligesom stifinder, bare i javascript.

Min venstre side er lavet med tabelrækker som enten er display: 'block' eller 'none'.

Hvis jeg så¨har et link i menuen, som skal ændre udseendet på højresiden, så reloades siden, men hvordan bevarer jeg venstresiden som den så ud da den sidst var på klienten?
Altså så de rækker der havde display: block de stadig har det??
Avatar billede ldanielsen Nybegynder
04. december 2003 - 13:50 #1
Må det ikke være frames?
Avatar billede ldanielsen Nybegynder
04. december 2003 - 13:57 #2
Anyway, du kan styre det med cookies, jeg foreslår at du laver to arrays, et der indeholder alle id'er for tr'er der skal kunne skjules:

var arrTd = new Array()
arrTd[0] = "td0"
arrTd[1] = "td1"
arrTd[2] = "td2"

og et andet array AF SAMME LÆNGDE, der fortæller om hver tr skal skjules:


var arrHidden = new Array()
arrHidden[0] = "0"
arrHidden[1] = "1"
arrHidden[2] = "0"

I dette tilfælde skal tr1 altså vises, og kun den

så laver du en
function showHide(){
  for (i=0;i<arrTr.length;i++){
    document.all[arrTr[i]].style.display = (arrHidden[i]=="1") ? "block" : "none"
    }
  }

Er du med så langt?
Avatar billede bongo20 Nybegynder
04. december 2003 - 15:51 #3
ja, det ser fint ud indtil videre :o)
Avatar billede bongo20 Nybegynder
08. december 2003 - 08:28 #4
Hvordan gemmer du den så??? er det med en cookie eller hvordan?
Avatar billede ldanielsen Nybegynder
09. december 2003 - 12:18 #5
Hej igen

Ja, jeg vil gemme begge arrays i cookies, som tekststrenge.

Så ved onLoad checkker jeg om cookies findes, ellers laver jeg tomme arrays:

function initArrays(){
  if (findCookie == ""){
    var arrTd = new Array()
    arrTd[0] = "td0"
    arrTd[1] = "td1"
    arrTd[2] = "td2"
    var arrHidden = new Array()
    arrHidden[0] = "0"
    arrHidden[1] = "1"
    arrHidden[2] = "0"
  }else{
    arrTd = findCookie("arrTd").split(",")
    arrHidden = findCookie("arrHidden").split(",")
    }
  showHide()
  }
//simpel cookie function:
function findCookie(name) {
  var t = document.cookie;
  first = t.indexOf(name);
  value = ""
  if(first != -1){
    first += name.length + 1;
    last = t.indexOf(';', first-1);
    if(last == -1) last = t.length;
    if (last > first) value = t.substring(first, last);
    }
  return value
  }


Ved unLoad (evt ved alle kliks) gemmer jeg arrays:

function saveArrays(){
  document.cookie += "arrTd=" + arrTd.join(",")
  document.cookie += "arrHidden=" + arrHidden.join(",")
  }
Avatar billede ldanielsen Nybegynder
09. december 2003 - 12:23 #6
Arrays er altså gemt som fx: "td0,td1,td2" og "0,1,0"

Nu angler du bare at skrive til arrays, så på linket i td1 skriver du fx. <a href="java script:menuClick(1)">link</a>

og laver en function:

function menuClick(n){
  arrHidden[n] = (arrHidden[n] == "0") ?  "1" : "0"
  showHide()
  }

Skal der ske andet ved klik end at menuen foldes ud/ind?
Avatar billede ldanielsen Nybegynder
09. december 2003 - 12:24 #7
intet af dette er testet, så lad mig vide om der er fejl
Avatar billede ldanielsen Nybegynder
09. december 2003 - 12:32 #8
retelse (der sikkert ikke er nødvendig, men anyway):

function saveArrays(){
  document.cookie += "arrTd=" + arrTd.join(",") + ";"
  document.cookie += "arrHidden=" + arrHidden.join(",") + ";"
  }
Avatar billede ldanielsen Nybegynder
09. december 2003 - 12:33 #9
Jeg kan se at jeg skifter mellem arrTd og arrTr, det er naturligvis en fejl, men jeg fornemmer at du har ok styr på det?!?
Avatar billede bongo20 Nybegynder
10. december 2003 - 12:21 #10
Det ser lovende ud det her, men jeg har et tilføjelses problem.

mit arrTr() bliver temmelig stort, faktisk på mere end 100 elementer og det vil jeg gerne bygge op på serveren direkte fra DB.

Ved du hvordan man opbygger et javascript og array i asp koden ???
Avatar billede bongo20 Nybegynder
11. december 2003 - 11:15 #11
bare glem det sidste, jeg laver den på klienten
Avatar billede bongo20 Nybegynder
11. december 2003 - 15:58 #12
Jeg har problemer med at få mit array gemt som cookie !!

Her er mine funktioner som henholdsvis sætter og henter cookien:

function saveArrays()
{
    document.cookie += "arrTr=" + arrTr.join(",") + ";"
    document.cookie += "arrHidden=" + arrHidden.join(",") + ";"
}

function findCookie(name)
{
    var t = document.cookie;
    first = t.indexOf(name);
    value = "";
    if ( first != -1 )
    {   
        first += name.length + 1;
          last = t.indexOf(';', first-1);
        if(last == -1) last = t.length;
          if (last > first) value = t.substring(first, last);
    }
    return value ;
}

I funktionen initArrays(), kaldes findCookie() men den returnerer aldrig andet end en tom streng, og derfor laver den jo altid et nyt array.

Har du en god ide ? :o)
Avatar billede ldanielsen Nybegynder
11. december 2003 - 18:43 #13
Ja, der har jeg jo lave endnu en fejl, det går da helt i skoven et her. Det skal være

function initArrays(){
  if (findCookie("arrHidden") == ""){
    .... osv

Jeg spørger om arrHidden findes, hvis den er der så er de der begge
Avatar billede bongo20 Nybegynder
11. december 2003 - 20:27 #14
Det der har jeg prøvet, og lige prøvet igen, men uden held.

Vil jeg ikke kunne finde cookien på HD hvis den er sat?
Avatar billede bongo20 Nybegynder
12. december 2003 - 11:47 #15
Jeg har fået det til at (næsten) virke, ved at fjerne + i disse sætninger:

document.cookie += "arrTr=" + arrTr.join(",") + ";"
document.cookie += "arrHidden=" + arrHidden.join(",") + ";"

så det bliver :

document.cookie = "arrTr=" + arrTr.join(",") + ";"
document.cookie = "arrHidden=" + arrHidden.join(",") + ";"

Nu vil jeg egentlig gerne have min cookie "clearet" en gang i mellem, eller sat en udløbsdato på,. hvordan gøres det?

og stadig vil jeg gerne vide hvor på maskinen man kan finde sine cookies?
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