Avatar billede laksen Nybegynder
23. februar 2005 - 22:18 Der er 9 kommentarer og
1 løsning

Replace value cookie

Nedenstående funktion tester værdien af en cookie. Hvis "value" allerede er repræsenteret i cookien fjernes den, hvis den ikke er repræsenteret tilføjes den.

function writeCookieMenu(name,value,expTime,path){//Tid i dage
  value = replaceCookieValue(getCookie('menu'),value);
  switch(writeCookieMenu.arguments.length){
  case 1:
    var expTime = 0;
    var path = "/";
  case 2:
    var expTime = 0;
    var path = "/";
  case 3:
    var path = "/";
  }
  var exp = new Date().getTime()+expTime*24*60*60*1000;
  exp = new Date(exp).toGMTString();
  var cook = name + " = " + escape(value) + ";expires=" + exp + ";path=" + path;
  document.cookie = cook;
}
function replaceCookieValue(Cval,Mval){
  if(Cval.indexOf(Mval)>-1){
    if(Cval.length==Mval.length)return "";
    Cval = Cval.split(",");
    var Nval = "";
    for(i=0;Cval.length>i;i++){
      if(Cval[i]!=Mval)Nval += Cval[i] + ",";
    }
    return Nval.substring(0,Nval.length-1);
  }else if(Cval.length>0) return Cval+","+Mval;
  else return Mval;
}

Nu skal jeg bruge følgende funktion: Hvis "value" allerede er repræsenteret i cookien skal intet gøres, hvis den ikke er repræsenteret skal den tilføjes.

Jeg er ikke så skrap til JavaScript. Derfor har jeg pastet min kode, da jeg blot tror, at den skal tilpasses.

Håber I kan hjælpe!
Avatar billede roenving Novice
24. februar 2005 - 17:14 #1
function replaceCookieValue(Cval,Mval){
  return (Cval.indexOf(Mval)>-1)?Cval:(Cval.length>0)?Cval+","+Mval:Mval;
}
Avatar billede laksen Nybegynder
27. februar 2005 - 12:48 #2
Jeg kunne ikke lige umiddelbart få det til at fungere.

For at være helt sikker på, at funktionen gør det rigtige kommer her en supplerende beskrivelse:

Funktionen får indholdet af cookien samt den værdi, der skal testes. Indholdet af cookien vil være på følgende form: "menu_1;menu_2;menu_5" eller lign. (evt. helt tom). Hvis test-værdien er "menu_2", skal funktionen ikke ændre på noget, da "menu_2" allerede er repræsenteret i cookien. Er test-værdien derimod "menu_3", skal funktionen sætte cookiens værdi til "menu_1;menu_2;menu_5;menu_3", da "menu_3" ikke på forhånd var repræsenteret i cookien.

Jeg har allerede en funktion, der fjerner en værdi fra cookien (f.eks. fjerne "menu_2" så cookiens værdi bliver "menu_1;menu_5"). Her skal jeg derimod bruge en funktion, der kun kan tilføje - ikke fjerne.
Avatar billede roenving Novice
27. februar 2005 - 13:48 #3
Den funktion gør det, at

-- den modtager to værdier Cval (nuværende cookie) og Mval (værdi, som der skal testes for ...

-- hvis Mval allerede findes i Cval returneres Cval,

-- ellers hvis Cval har nogle værdier returneres Cval + Mval adskilt af komma,

-- ellers returneres Mval, da det så er den eneste værdi i cookien !-)
Avatar billede laksen Nybegynder
27. februar 2005 - 13:52 #4
Fornemt! Tak for forklaringen. Så gør den i hvert fald det rigtige.

Jeg vil forsøge at implementere den lidt senere.

Vender tilbage derefter.
Avatar billede laksen Nybegynder
27. februar 2005 - 14:30 #5
Nu virker den ene del. Hvis værdien allerede er repræsenteret i cookien, ændres intet. Hvis værdien derimod ikke er repræsenteret i cookien sker heller ikke noget. I så fald skal værdien af cookien ændres, så den indeholder den nye værdi.

Hvordag gør jeg det? Jeg har allerede en funktion, der kan skrive til en cookie. Kan jeg blot indsætte den i din funktion et sted??
Avatar billede roenving Novice
27. februar 2005 - 14:36 #6
?-)

function writeCookieMenu(name,value,expTime,path){//Tid i dage
  value = replaceCookieValue(getCookie('menu'),value);
  switch(writeCookieMenu.arguments.length){
  case 1:
    var expTime = 0;
    var path = "/";
  case 2:
    var expTime = 0;
    var path = "/";
  case 3:
    var path = "/";
  }
  var exp = new Date().getTime()+expTime*24*60*60*1000;
  exp = new Date(exp).toGMTString();
  var cook = name + " = " + escape(value) + ";expires=" + exp + ";path=" + path;
  document.cookie = cook;
}

function replaceCookieValue(Cval,Mval){
  return (Cval.indexOf(Mval)>-1)?Cval:(Cval.length>0)?Cval+","+Mval:Mval;
}

-- skulle være nok !-)
Avatar billede laksen Nybegynder
27. februar 2005 - 15:00 #7
Tak, nu fungerer det, som det skal.

Fejlen var ganske banal. Jeg troede, at jeg skulle bruge funktionen "replaceCookieValue" alene, hvorfor jeg havde linket direkte til den.

Da jeg ændrede kaldet, så det skete til funktionen "writeCookieMenu" og dermed videre til den anden funktion virkede det fint.

Du kan bare lægge et svar.
Avatar billede roenving Novice
27. februar 2005 - 15:06 #8
Velbekomme '-)
Avatar billede laksen Nybegynder
27. februar 2005 - 15:12 #9
Tusind tak for hurtig og kompetent hjælp!
Avatar billede roenving Novice
27. februar 2005 - 15:21 #10
-- og jeg 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