16. november 2004 - 13:16Der er
2 kommentarer og 1 løsning
Favoritliste med cookies
Når jeg vil slette et objekt i min cookie, bliver det sidste objekt altid slettet i stedet for det objekt, som jeg klikker på. Kan i hjælpe? Her er den komplette kode:
function HentCookie(StrNavn) { var ObjCookie = document.cookie; var StrFortegn = StrNavn + '='; var StrStart2 = ObjCookie.indexOf('; ' + StrFortegn); if (StrStart2 == -1) { StrStart2 = ObjCookie.indexOf(StrFortegn); if (StrStart2 != 0) return null; } else { StrStart2 += 2; } var StrSlut = document.cookie.indexOf(';', StrStart2); if (StrSlut == -1) StrSlut = ObjCookie.length; return unescape(ObjCookie.substring(StrStart2 + StrFortegn.length, StrSlut)); }
function SletCookie(StrNavn) { if (HentCookie(StrNavn)) { document.cookie = StrNavn + '=' + '; expires=Thu, 01-Jan-70 00:00:01 GMT'; } }
function SkrivDato(){ var StrDenneDato = new Date(); FixDato(StrDenneDato); return new Date((StrDenneDato.getTime() + 28 * 24 * 60 * 60 * 1000)); }
function FixDato(dtmDate) { var objBase = new Date(0); var objSkew = objBase.getTime(); if (objSkew > 0) dtmDate.setTime(dtmDate.getTime() - objSkew); }
function SkiftKnapFavorit(StrBilledeID, StrBilledeNavn){ objButton = new favClientElement(StrBilledeID); objButton.imgUrl(StrBilledeNavn); }
var ObjektFavoritter2 = HentCookie('favFavoritter');
if (ObjektFavoritter2 == null) { document.write("Der er ingen huse i din favoritliste!"); } else { // opdeler data i objekter var ArrAlleHuse = ObjektFavoritter2.split(';'); for (y=0; y<ArrAlleHuse.length; y++) {
// opdeler objektet i tre segmenter; objektnr, startdato og varighed var ArrHeleListen = ArrAlleHuse[y].split(','); for (i=0; i<ArrHeleListen.length; i++) { var Objektnummer = (ArrHeleListen[i]) document.write ("PD"+Objektnummer+" "); i = i + 1 var StartDato = (ArrHeleListen[i]) i = i + 1 var Varighed = (ArrHeleListen[i])
// link til at slette objekt fra favoritlisten document.write('<a href="#" onclick="SletObjektFraFavoritter(Objektnummer,StartDato,Varighed,y);document.location.reload();"><img src="btn_fjern_favoritter.gif" border="0" id="'+y+'" alt=""></a><br>');
} } } </SCRIPT>
Jeg regner med, det går galt i det sidste loop et eller andet sted, men jeg kan ikke regne den ud... :'(
function HentCookie(StrNavn) { var ObjCookie = document.cookie; var StrFortegn = StrNavn + '='; var StrStart2 = ObjCookie.indexOf('; ' + StrFortegn); if (StrStart2 == -1) { StrStart2 = ObjCookie.indexOf(StrFortegn); if (StrStart2 != 0) return null; } else { StrStart2 += 2; } var StrSlut = document.cookie.indexOf(';', StrStart2); if (StrSlut == -1) StrSlut = ObjCookie.length; return unescape(ObjCookie.substring(StrStart2 + StrFortegn.length, StrSlut)); }
function SletCookie(StrNavn) { if (HentCookie(StrNavn)) { document.cookie = StrNavn + '=' + '; expires=Thu, 01-Jan-70 00:00:01 GMT'; } }
function SkrivDato(){ var StrDenneDato = new Date(); FixDato(StrDenneDato); return new Date((StrDenneDato.getTime() + 28 * 24 * 60 * 60 * 1000)); }
function FixDato(dtmDate) { var objBase = new Date(0); var objSkew = objBase.getTime(); if (objSkew > 0) dtmDate.setTime(dtmDate.getTime() - objSkew); }
function SkiftKnapFavorit(StrBilledeID, StrBilledeNavn){ objButton = new favClientElement(StrBilledeID); objButton.imgUrl(StrBilledeNavn); }
var ObjektFavoritter2 = HentCookie('favFavoritter');
if (ObjektFavoritter2 == null) { document.write("Der er ingen huse i din favoritliste!"); } else { // opdeler data i objekter var ArrAlleHuse = ObjektFavoritter2.split(';'); for (y=0; y<ArrAlleHuse.length; y++) {
// opdeler objektet i tre segmenter; objektnr, startdato og varighed var ArrHeleListen = ArrAlleHuse[y].split(','); var Objektnummer = (ArrHeleListen[0]) document.write ("PD"+Objektnummer+" "); var StartDato = (ArrHeleListen[1]) var Varighed = (ArrHeleListen[2])
// link til at slette objekt fra favoritlisten var strObj = ""+y document.write('<a href="#" onclick="SletObjektFraFavoritter(' + strObj + ',StartDato,Varighed,y);document.location.reload();"><img src="btn_fjern_favoritter.gif" border="0" id="'+y+'" alt=""></a><br>');
} } </SCRIPT> =======
Følgende er lavet om: generelt set er der ændret så der benyytes objektets plads i arrayet
I SletObjektFraFavoritter har jeg ændret til if(i != StrObjektNr) for at den looper igennem hele arrayet og kigger efter pladsen. Der er ændret så der benyttes selve nummeret istedet for hele objektet
I udskriftsdelen er der ændret så der ikke loopes igennem objekterne. Du kender pladserne af elementerne i objektet, og derfor sparer du noget tid/CPU kraft på denne måde.
Derudover skriver jeg pladsen på objektet ud som et string object istedet, da det den ellers er en reference til det sidst indsatte objekt istedet for det nummer du reelt vil have skrevet
Tusind tak for svaret. Koden virker perfekt, men der er opstået et lille problem efter din rettelse. Når jeg bruger følgende kald til henholdsvis at skrive og slette et enkelt objekt, kan jeg kun klikke tilføj/fjern to gange. Derefter virker funktionen ikke mere. Jeg kan se problemet opstår omkring den linie, du har ændret i SletObjektFraFavoritter.
Håber det virker, ellers hopper vi på den til den lader være med at give problemer :o)
/Luzk
Synes godt om
Ny brugerNybegynder
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.