---
title: "spara ett lagers status..."
type: "forum-thread"
url: "https://www.webforum.nu/amne/javascript/134635-spara-ett-lagers-status"
topic: "JavaScript"
topic_url: "https://www.webforum.nu/amne/javascript"
author: "mikael_a"
published: "2005-09-22T12:56:05.000Z"
updated: "2005-09-27T17:16:11.000Z"
replies: 7
views: 561
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/javascript/134635-spara-ett-lagers-status"
---

# spara ett lagers status...

## #1 — mikael_a, 2005-09-22T12:56Z

Spara lagrens position med hjälp utav javascript, är detta möjligt?

Jag öppnar och stänger diverse divar/lager med hjälp utav följande skript:

```
function expandCollapse() {
	for (var i=0; i<expandCollapse.arguments.length; i++) {
		var element = document.getElementById(expandCollapse.arguments[i]);
		element.style.display = (element.style.display == "none") ? "block" : "none";
	}
}
```

är det möjligt att spara lagrets position dvs om anändaren har valt att visa lagret, och när han går in på sidan nästa gång är fortfarande lagret synligt, stänger han lagret och återkommer är lagret inte synligt...

Permalänk: https://www.webforum.nu/p/134635

## #2 — Peter S, 2005-09-26T09:58Z

Utifrån din kod, antar jag att du vill spara ett lagers display\-värde. Då kan vi utnyttja spangos [cookiebibliotek](http://www.webforum.nu/showthread.php?t=37492):

```
/********************************************
            script.webforum.nu
      Cookiebibliotek skrivet av spango
           <gustaf-c@dsv.su.se>
Sprid gärna detta script till nära och kära!
        (men lämna kvar dessa rader)
********************************************/

// Cookieklassen

function Cookie(name, value, expires, domain, path, secure){
	this.name    = name;
	this.value   = value;
	this.expires = expires;
	this.domain  = domain;
	this.path    = path;
	this.secure  = secure;
	
	}

// Metoder för cookieklassen

function set(){
	var cookiestr = escape(new String(this.name)) + "=" + escape(new String(this.value));
	if(this.expires) cookiestr += "; Expires=" + this.expirationString();
	if(this.domain)  cookiestr += "; Domain=" + this.domain;
	if(this.path)    cookiestr += "; Path=" + this.path;
	if(this.secure)  cookiestr += "; Secure";
	document.cookie = cookiestr;
	}

function expirationString(){
	var ex = this.expires;
	if(typeof ex == typeof "string") return ex;
	if(typeof ex == typeof 1){
		var msPerDag = 1000 * 60 * 60 * 24;
		ex = new Date();
		ex.setTime(ex.getTime() + (msPerDag * this.expires));
		}
	return ex.toUTCString ? ex.toUTCString() : ex.toGMTString();
	}

function setDomainToCurrent(){
	this.domain = self.location.host;
	}

function setPathToCurrent(){
	var pth = self.location.pathname.substr(self.location.pathname.indexOf  ("/"));
	if(!pth) pth = "/";
	else pth = pth.substring(0, pth.lastIndexOf("/") + 1);
	this.path = pth;
	}

// Allmäna funktioner

function getCookie(name, alt){
	if(!alt) alt = "";
	name = escape(name) + "=";
	if(document.cookie.indexOf(name) == -1) return alt;
	
	var kaka = document.cookie.substr(document.cookie.lastIndexOf(name));
	kaka = kaka.substr(name.length);
	var slut = (kaka.indexOf(';') == -1) ? kaka.length : kaka.indexOf(';');
	kaka = kaka.substring(0, slut);
	
	return unescape(kaka);
	}

function deleteCookie(name, path){
	var cookiestr = escape(name) + "=_; Expires=Thursday, 01-Jan-1970 00:00:00 GMT";
	if(path) cookiestr += "; Path=" + path;
	document.cookie = cookiestr;
	}

function getAllCookieNames(){
	var ac = document.cookie.split(" ");
	var allCookies = new Array();
	for(var i = 0; i < ac.length; i++){
		var tmp = ac[ i].split("=");
		allCookies[ i] = unescape(tmp[0]);
		}
	return allCookies;
	}

// Lägg till metoder

Cookie.prototype.set                = set;
Cookie.prototype.expirationString   = expirationString;
Cookie.prototype.setDomainToCurrent = setDomainToCurrent;
Cookie.prototype.setPathToCurrent   = setPathToCurrent;

// Statiska metoder

Cookie.get         = getCookie;
Cookie.remove      = deleteCookie;
Cookie.getAllNames = getAllCookieNames;

function expandCollapse(){
    var args = arguments,
        len  = args.length;

    for (var i = 0; i < len; ++i){
        var elm = document.getElementById(args[i]);

        elm.style.display = (elm.style.display == "none") ? "block" : "none";

        if (Cookie.get(args[i])){
            Cookie.remove(args[i]);
        }

        new Cookie(args[i], elm.style.display, 365, false, "/").set();
    }
}

window.onload = function(){
    var c = Cookie.getAllNames(),
        i = c.length;

    while (i--){
        document.getElementById(c[i]).style.display = Cookie.get(c[i]);
    }
}
```

Med reservation för eventuella fel  ;)

Permalänk: https://www.webforum.nu/p/1678279

## #3 — mikael_a, 2005-09-27T13:59Z

tack.. fungerar nästan. Får fel på rad 138, dvs när sidan laddas. Objekt krävs. rad 138

window.onload = function(){
    var c = Cookie.getAllNames(),
        i = c.length;

    while (i--){
        document.getElementById(c*).style.display = Cookie.get(c*);
    }
}

rad 138 är den näst siste måsvingen. Så jag kan tänka mig att det är en variabel som inte är satt eller något liknande, för själva funktionen fungerar, dvs positionen sparas och är kvar även om jag har stängt ner webbläsaren.**

Permalänk: https://www.webforum.nu/p/1678658

## #4 — mikael_a, 2005-09-27T14:05Z

får inget fel i firefox, verkar vara IE som strular...

Permalänk: https://www.webforum.nu/p/1678663

## #5 — Peter S, 2005-09-27T15:52Z

Hm, ok. Testa med att ersätta getAllCookieNames() med

```
function getAllCookieNames(){
	var ac = document.cookie.split(" ");
	var allCookies = new Array();
	if (ac.length == 1 && ac[0].replace(/(^\s+)|(\s+$)/g, "").length == 0){
		return allCookies;
	}
	for(var i = 0; i < ac.length; i++){
		var tmp = ac[ i].split("=");
		allCookies[ i] = unescape(tmp[0]);
		}
	return allCookies;
	}
```

Permalänk: https://www.webforum.nu/p/1678694

## #6 — mikael_a, 2005-09-27T16:52Z

nope fortfarande samma fel.

dock skall 

var args = arguments,
        len  = args.length;

vara så och inte ett ; istället för , ???

gå till sidan: <http://mekdator.mine.nu/projekthantering_v2/>
logga in med test/1221
så ser du vad jag försöker göra, samt eventuellt felet. Tror det beror på window.onload funktionen.

Permalänk: https://www.webforum.nu/p/1678715

## #7 — Peter S, 2005-09-27T17:04Z

```
window.onload = function(){
    var c = Cookie.getAllNames(),
        i = c.length;

    while (i--){
	var elm = document.getElementById(c[i]);
	if (elm){
	        document.getElementById(c[i]).style.display = Cookie.get(c[i]);
	}
    }
}
```

> **mikael_a skrev:**
>
> var args = arguments,
> len = args.length;

Det skall vara så. Variabler kan deklareras och definieras separerade med kommatecken  :)

Permalänk: https://www.webforum.nu/p/1678719

## #8 — mikael_a, 2005-09-27T17:16Z

fungerar tack...

ok, visste inte det, har inte gjort så mycket javaScripts :)

Permalänk: https://www.webforum.nu/p/1678721

---

Tråden på webben: https://www.webforum.nu/amne/javascript/134635-spara-ett-lagers-status
