setCookie funktioniert eingeschränkt

  • Themenstarter Themenstarter Keksverwalter
  • Beginndatum Beginndatum
K

Keksverwalter

Grüezi!

Vielleicht hab ich blos ein Verständnisproblem, oder mit dem JScode ist etwas faul.

Javascript:
function collapse(elmID)
{
    var imgID = 'img_' + elmID;   
    if(document.getElementById(elmID).style.display == 'block') 
        {
            document.getElementById(elmID).style.display = 'none';
            document.getElementById(imgID).src = 'inc-files/img/closed.png';  
        }   
        else 
        {
            document.getElementById(elmID).style.display = 'block';
            document.getElementById(imgID).src = 'inc-files/img/opened.png';  
        }
    set_cookie('my_cookiename', elmID, 1);
}

function get_cookie( cookieName )
{
    strValue = false;
    if( strCookie = document.cookie )
        {
            if( arrCookie = strCookie.match( new RegExp( cookieName + '=([^;]*)', 'g')))
                {
                    strValue=RegExp.$1;
                }
        }
    return(strValue);
}

function set_cookie(cookieName, cookieValue, intDays)
{
    objNow = new Date();
    strExp = new Date( objNow.getTime() + ( intDays * 86400000) );
    document.cookie = cookieName + '=' +
                      cookieValue + ';expires=' +
                      strExp.toGMTString() + ';';
    return true;
}

window.onload = function(){
  strID = get_cookie('my_cookiename');
  if(document.getElementById(strID) != null)
    collapse(strID);
}

Setze ich mit der Funktion collapse('my_elmID') den display-Wert eines zunächst versteckten Elements im Dokument auf "block", verlasse dieses im Browser, und kehre zurück, wird es, wie gewünscht, in seinem geöffneten Zustand gezeigt.

Setze ich nun den display-Wert des Objekts wieder auf "none", schließe und öffne die Seite erneut, wird es weiterhin im geöffneten Zustand (display:block) geladen. :confused:

Kann mir bitte jemand diesen Zusammenhang erkären, und mir verraten, was im Script umzuschreiben ist, damit hier auch der "zurückgesetzte" display-Wert im Cookie hinterlegt wird?

Danke!
 
Hab ich meine Frage unmittelbar vor'm Heiligen Abend zum falschen Zeitpunkt gestellt, dass keiner von ihr Notiz genommen hat?
 
Hi,

was du in deinem Script speicherst, ist lediglich die ID des Elements. Diese übergibst du beim Laden der Seite der Togglefunktion collapse. Die Funktion wechselt allerdings nur den Ausgangszustand des Elements, stellt aber nicht den gewünschten Zustand wieder her.

Als Lösung musst du im Cookie zusätzlich den Zustand speichern, der getoggelt werden soll. Wird die Seite neu geladen, wird
- das Cookie ausgelesen,
- ID und Zustand extrahiert,
- der erforderliche Ausgangszustand hergestellt und
- die Toggelfunktion aufgerufen.

Beispiel:
Code:
function collapse(elmID)
{
    var imgID = 'img_' + elmID;
    var strState = "none";

    if(document.getElementById(elmID).style.display == 'block')
        {
            document.getElementById(elmID).style.display = 'none';
            document.getElementById(imgID).src = 'inc-files/img/closed.png';
            // Zustand speichern, der beim Neuladen der Seite getoggelt werden muss
            strState = "block";
        }
        else
        {
            document.getElementById(elmID).style.display = 'block';
            document.getElementById(imgID).src = 'inc-files/img/opened.png';
            // Zustand speichern, der beim Neuladen der Seite getoggelt werden muss
            strState = "none";
        }
    set_cookie('my_cookiename', elmID + "###" + strState, 1);
}

function get_cookie( cookieName )
{
    strValue = false;
    if( strCookie = document.cookie )
        {
            if( arrCookie = strCookie.match( new RegExp( cookieName + '=([^;]*)', 'g')))
                {
                    strValue=RegExp.$1;
                }
        }
    return(strValue);
}

function set_cookie(cookieName, cookieValue, intDays)
{
    objNow = new Date();
    strExp = new Date( objNow.getTime() + ( intDays * 86400000) );
    document.cookie = cookieName + '=' +
                      cookieValue + ';expires=' +
                      strExp.toGMTString() + ';';
    return true;
}

window.onload = function(){
  var strCookie = get_cookie('my_cookiename');

  // Test, ob Cookiewert zurückgegeben wurde
  if(typeof strCookie.split != "undefined"){
    // Cookie auslesen und in ID und Ausgangszustand zerlegen
    var arrCookie = strCookie.split("###");
    if(document.getElementById(arrCookie[0]) != null){
      // Ausgangszustand herstellen
      document.getElementById(arrCookie[0]).style.display = arrCookie[1];
      // Toggeln
      collapse(arrCookie[0]);
    }
  }
}
Ciao
Quaese
 
Was will man mehr? ;-)

Dank dir :)

Der Keksverwalter ist denn mal auf'm Weg zum Krümelmonster :D
 
Zurück