Avatar billede ferrari_brian Nybegynder
11. maj 2006 - 13:10 Der er 12 kommentarer og
1 løsning

javascript-cookie der indeholder id'er og kan slette disse igen

Hej

Jeg skal have lavet en cookie på basis af: http://www.eksperten.dk/spm/708466 hvor jeg laver et træ med input fra en SQL-database

Men jeg kan ikke få det til at fungere.. det jeg vil gøre er at jeg vil gemme id for hver af de grene der er åbne i cookien, dette skal være således at hvis det er en hovedgren skal det være 'R-'+id og hvis det er en undergren skal det være 'S-'+id således kan jeg få det aflæst.

men det er så vigtigt at den sletter id'et i cookieen, når den er færdig med at blive brugt, det vil sige at træet lukker sammen.

hvorledes laver jeg dette? jeg har set på noget herinde på eksperten, men der skriver den id+'-'+1 eller 0 og dette dur ikke da den kun skal være der hvis den er aktuel, ellers vil det jo fejle når der kommer nye entries i databasen og de så ikke findes i cookieen
Avatar billede roenving Novice
11. maj 2006 - 13:39 #1
Måske noget i denne stil (absolut utestet !-)

function setDeleteCookie(type,id,set){
  var cook = document.cookie,cookVal,oldCookVal;
  var newVal = type + "-" + id + ",";
  if(cook){
    cookVal = oldCookVal = cook.split("tree=")[1].split(";")[0];
    if(set){
      if(cookVal.indexOf(newVal) == -1)
        cookVal += newVal;
    }else
      cookVal = cookVal.replace(newVal,"");
  }else if(set)
    cookVal = newVal;
  if(cookVal || !set && !cookVal){
    if(oldCookVal)
      cook = cook.replace(oldCookVal,cookVal);
    else
      cook += "tree=" + cookVal;
    var exp = new Date(new Date().getTime() + 10 * 365 * 24 * 60 * 60 * 1000);//10 år
    document.cookie = cook + ";expires=" + exp.toGMTString() + ";path=/";
  }
}
Avatar billede ldanielsen Nybegynder
11. maj 2006 - 13:47 #2
Mit bud:

//hent værdien ud med en hentCookieFunktion, som jeg ikke lige har her :o)
//nu er værdien fx "R-41,S-5,".
//Bemærk kommaerne, og at der også er et komma til sidst, det gør det lidt lettere

var strCookie = "R-41,S-5,"


//nu fjerner jeg "R-41":
strCookie = RemoveString("R-41");

//Nu tilføjer jeg "R-42" i enden af strengen
strCookie = AddString("R-42");


function RemoveString(strValue){
    var reg = new RegExp(strValue + ",", "g");
    return strCookie.replace(reg, "");
    }
   
function AddString(strValue){
    //for ikke at have dubletter fjerner jeg lige værdien først
    strCookie = RemoveString(strValue);
    return strCookie + strValue + ",";
    }
Avatar billede ferrari_brian Nybegynder
11. maj 2006 - 15:18 #3
Det vil sige at det du gør er at du opretter en streng hvori du lægger dine værdier, og derefter fjerner du dem så derfra og lægger en ny i hvis det er tilfældet?

Derefter er det så meningen at jeg kan skrive denne streng til min cookie og 2. gang så henter jeg den ind igen og splitter denne? og så skal jeg derefter slette min cookie for at skrive på ny...

er det ikke nogenlunde sådan?

så tror jeg nemlig det virker... jeg vil prøve at se om jeg kan få det testet i weekenden, eller om jeg er nødt til at vente til Mandag... (står nemlig og skal ud af døren om 10 min).

Men tak for ideen so far... Jeg er dog igang med at lave det med et array, men tror måske det er nemmere at håndtere en streng, ellers skal jeg jo konvertere den hver gang?

Jeg vender lige tilbage senest mandag, og så får du dine points hvis det virker! takker.
Avatar billede ferrari_brian Nybegynder
11. maj 2006 - 15:27 #4
det gælder begge forslag... ups... hehe :)
Avatar billede ferrari_brian Nybegynder
15. maj 2006 - 09:48 #5
<html>
<head>
<script>
function RemoveString(strValue)
{
  var reg = new RegExp(strValue + ",", "g");
  return strCookie.replace(reg, "");
}
   
function AddString(strValue)
{
  strCookie = RemoveString(strValue);
  return strCookie + strValue + ",";
}

function getCookie(NameOfCookie)
{
  if (document.cookie.length > 0)
  {
    begin = document.cookie.indexOf(NameOfCookie+"=");     
    if (begin != -1)
    {         
      begin += NameOfCookie.length+1;     
      end = document.cookie.indexOf(";", begin);
      if (end == -1)
      {
        end = document.cookie.length;
      }
      return unescape(document.cookie.substring(begin, end));
    }
  }
  return null;
}

function setCookie(NameOfCookie, value, expiredays)
{
  var ExpireDate = new Date();
  ExpireDate.setTime(ExpireDate.getTime() + (expiredays * 24 * 3600 * 1000));
  document.cookie = NameOfCookie + "=" + escape(value) + ((expiredays == null) ? "" : "; expires=" + ExpireDate.toGMTString());
}

function delCookie (NameOfCookie)
{
  if (getCookie(NameOfCookie))
  {
    document.cookie = NameOfCookie + "=" +
    "; expires=Thu, 01-Jan-70 00:00:01 GMT";
  }
}

function Cookie()
{
  strCookie = getCookie('Prefs');

  if (strCookie!=null)
  {
    alert(strCookie)
  }
  else
  {
    alert('no cookie set');
  }

  strCookie = RemoveString("R-41");
  alert(strCookie);
  strCookie = AddString("R-42");
  alert(strCookie);
  setCookie('Prefs',strCookie,365)
}

</script>
</head>
<body>
<p><a href="#" onClick="delCookie('Prefs')">Click here to reset the cookie.</a></p>
<p><a href="coo.html">Click here to reload the page.</a></p>
<p><a href="#" onClick="setCookie('Prefs','R-41,S-5,',365)">R-41,S-5,</a></p>
<p><a href="#" onClick="setCookie('Prefs','R-21,S-7,',365)">R-21,S-7,</a></p>
<p><a href="#" onClick="Cookie()">prefs</a></p>
</body>
</html>
Avatar billede ferrari_brian Nybegynder
15. maj 2006 - 09:51 #6
Det her virker sådan set, men den giver godt nok en fejl (den lille gule trekant nede i venstre hjørne når jeg bruger IE) men det er når cookien ikke er sat. Så fejlen er stort set logisk, og betyder ikke så meget, selvom den er irriterende

så skal jeg bare se om jeg kan få den til at gøre som jeg vil nu ... men tak for hjælpen ... smid lige et svar?

jeg har godt nok ikke testet det af roenvigs men det jeg har nu virker nogenlunde som jeg vil have det... !
Avatar billede ferrari_brian Nybegynder
15. maj 2006 - 10:32 #7
kan man ikke også lave en
if(R-2 indeholdt i cookie)
{
  gør noget ?
}
Avatar billede ldanielsen Nybegynder
15. maj 2006 - 11:02 #8
Ang. de lille gule ikon:

Dobbeltklik på det, så vises fejlen. I denne box sætter du kryds i "Vis altid denne meddelelse ..."

Og ret så fejlene. Der bør ikke være javascriptfejl på en hjemmeside.
Avatar billede ferrari_brian Nybegynder
15. maj 2006 - 13:14 #9
jeg ved det, men fejlen er fordi den siger at min strCookie ikke er defineret selvom den er ... men tror jeg har løst problemet efter integrationen i det andet jeg laver... mht den if sætning så brugte jeg strCookie.search('R-'+id+',')
Avatar billede ferrari_brian Nybegynder
16. maj 2006 - 13:18 #10
point ?
Avatar billede ldanielsen Nybegynder
16. maj 2006 - 13:26 #11
Hvem har hjulpet dig, hvem skal have point? Hvis du brugte min funktion, så vil jeg da gerne have lidt ...
Avatar billede ferrari_brian Nybegynder
16. maj 2006 - 15:59 #12
jeg har brugt hvad du ser... så ja din funktion er brugt (ldanielsen)
Avatar billede ldanielsen Nybegynder
17. maj 2006 - 10:46 #13
OK
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