Frage

Aufgrund meiner vorherigen Frage und hier , fand ich, dass ich ein Cookie mit Javascript einstellen. Ich möchte es kombinieren mit jquery für ein- und Tabellenzeilen ein Cookie Zustand Set zu haben. Ich möchte die versteckten Reihen auf reload versteckt halten.

Hier ist das, was ich erreicht habe, so weit:

// Load cookies if any   
if(readCookie('togState')) {
       $('table#toggle tr.' + readCookie('togState')).hide();
    }

    $(function() {
        $('table#toggle tr.container').click(function() {
          var idTog = $(this).attr('id');
            $(this).toggleClass('off').nextAll('.' + idTog).toggle();
            setCookie('togState', idTog, 30);
            alert('Cookies: ' + readCookie('togState'));
        });

});

Die Mutter: <tr id="parent-1" class="container">

Die folgenden Kinder: <tr class="contained parent-1">, etc

Wie Sie das Cookie sehen können, ist zu lesen, ist aber nicht auf Aktualisierung des Browsers eingestellt. Was mache ich falsch?

Was ich will, ist versteckt alle ein- und Zeilen (mit ihren Klassen gleich ihre Eltern Container-ID), wenn der übergeordnete Container angeklickt wird, und so das Cookie gesetzt wird.

Jede Hilfe wäre sehr geschätzt. Danke.

Die Quelle Cookie ich für schnelle Überprüfung verwendet:

function setCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

function eraseCookie(name) {
    setCookie(name,"",-1);
}

UPDATE:

Ich habe auch jede Funktion ohne Glück versucht:

$('table#toggle tr.' + readCookie('togState')).each(function() {
     $(this).hide();
   });

UPDATE 2:

Wenn ich den Scheck innerhalb jquery platzieren (I verwendet hide ()), es funktioniert, , aber nur für ein einziges Plätzchen. So, jetzt das eigentliche Problem ist , wie für mehr Elternzeilen mehr Cookies zu halten?

War es hilfreich?

Lösung

Wenn Sie mit der setCookie() Funktion von diese Antwort , Sie Einstellung Ihre Cookie eine Lebensdauer von 30 Sekunden zu haben. Das ist wahrscheinlich nicht lange genug, um für Ihre Anforderungen, und Sie sollten wahrscheinlich betrachten es immer so leicht zu erhöhen. : -)

Bearbeiten Re: Ihre Frage bearbeiten - Wenn Sie versuchen, mehrere Cookies zu setzen, werden Sie ein Problem mit der folgenden Zeile haben:

document.cookie = name+"="+value+expires+"; path=/";

Hier sind Sie die cookie Eigenschaft überschrieben wird jedes Mal, wenn setCookie() nennen. Wenn Sie mehrere Cookies einstellen möchten, müssen Sie prepend / append ein neuer Name / Wert-Paar auf den String mit jedem Aufruf setCookie()

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top