mikael_aMedlem sedan mars 2000502 inlägg
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
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
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
får inget fel i firefox, verkar vara IE som strular...
Peter SMedlem sedan dec. 20025 484 inlägg
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
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
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
fungerar tack...
ok, visste inte det, har inte gjort så mycket javaScripts :)