webForumDet fria alternativet

spara ett lagers status...

7 svar · 561 visningar · startad av mikael_a

mikael_aMedlem sedan mars 2000502 inlägg
#1

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...

Peter SMedlem sedan dec. 20025 484 inlägg
#2

Utifrån din kod, antar jag att du vill spara ett lagers display-värde. Då kan vi utnyttja spangos cookiebibliotek:

/********************************************
            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 ;)

mikael_aMedlem sedan mars 2000502 inlägg
#3

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.**

mikael_aMedlem sedan mars 2000502 inlägg
#4

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

Peter SMedlem sedan dec. 20025 484 inlägg
#5

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;
	}
mikael_aMedlem sedan mars 2000502 inlägg
#6

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.

Peter SMedlem sedan dec. 20025 484 inlägg
#7
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 :)

mikael_aMedlem sedan mars 2000502 inlägg
#8

fungerar tack...

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

Genererad på 389 ms · cache AV · v20260730165559-full.f96bc7eb