Přetrvávání hodnot CheckBox

hlasů
2

Mám stránku s několika políček. I zkontrolovat několik z nich a přejít na další stránku, když se vrátím na této stránce, tato políčka musí být i nadále kontrolovány, jako byly před přejde na jinou stránku. Potřebuji, aby to s Javascript. Žádné ponětí ??

Položena 20/07/2009 v 16:28
zdroj uživatelem
V jiných jazycích...                            


3 odpovědí

hlasů
1

Budete muset přetrvávat mezi page-požadavky. Můžete použít sezení nebo sušenky, jak toho dosáhnout. Jaký typ serveru děláš, a jaký typ server-side jazyk?

Předchozí otázky týkající SO mít adres zápisu / čtení cookies z JavaScriptu.

Odpovězeno 20/07/2009 v 16:30
zdroj uživatelem

hlasů
4

Pokud jste omezen pouze na JavaScriptu a ne na straně serveru jazyk Myslím, že jste odešel do čtení / zápis cookies k udržení stavu. Jak již bylo odkazováno, na straně serveru technologie jsou mnohem lepší na to, ale pokud musí:

JavaScript ukázkový kód cookie (reference: http://www.quirksmode.org/js/cookies.html ):

function createCookie(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) {
    createCookie(name,"",-1);
}
Odpovězeno 20/07/2009 v 16:37
zdroj uživatelem

hlasů
0

Nemyslím si, že existuje nějaký poměrně složitý způsob, jak to udělat, aniž by jakýkoli přístup ke kódu na straně serveru, protože na minimum budete muset nainstalovat kód a také identifikovat ovládací prvky HTML např za účelem jejich kontrolu. Jsem přiměřeném kód, který dělá to, co chcete níže.

Důležité poznámky:

  1. Kód vyžaduje, aby každý políčko je dán zřetelný atribut id.
  2. Kontrola stavu je uložen v souboru cookie s názvem ‚JS_PERSISTENCE_COOKIE‘. Bylo by lepší, aby uložit název tohoto cookie v proměnné namísto napevno ji v několika oddělených místech, která jsem učinil. Jaký typ proměnné by měly ukládat název závisí na aplikaci a požadavcích.
  3. Bylo by lepší, aby balíček kód uvnitř objektu namísto jako banda volných funkcí, jako jsem učinil. Nicméně, toto není relevantní pro vaše počáteční otázku.
  4. Po kliknutí na několik políček, můžete simulovat „navigovat zpět na tuto stránku“ a stisknout CTRL + F5. F5 samo o sobě nestačí.

Zde je kód, a některé vzorky HTML pro testování:

<body onload="restorePersistedCheckBoxes()">
    <input type="checkbox" id="check1" onclick="persistCheckBox(this)" />
    <input type="checkbox" id="check2" onclick="persistCheckBox(this)" />
    <input type="checkbox" id="check3" onclick="persistCheckBox(this)" />
    <input type="button" value="Check cookie" 
           onclick="alert(document.cookie)" />
    <input type="button" value="Clear cookie"
           onclick="clearPersistenceCookie()" />

    <script type="text/javascript">
        // This function reads the cookie and checks/unchecks all elements
        // that have been stored inside. It will NOT mess with checkboxes 
        // whose state has not yet been recorded at all.
        function restorePersistedCheckBoxes() {
            var aStatus = getPersistedCheckStatus();
            for(var i = 0; i < aStatus.length; i++) {
                var aPair = aStatus[i].split(':');
                var el = document.getElementById(aPair[0]);
                if(el) {
                    el.checked = aPair[1] == '1';
                }
            }
        }

        // This function takes as input an input type="checkbox" element and
        // stores its check state in the persistence cookie. It is smart
        // enough to add or replace the state as appropriate, and not affect
        // the stored state of other checkboxes.    
        function persistCheckBox(el) {
            var found = false;
            var currentStateFragment = el.id + ':' + (el.checked ? '1' : '0');
            var aStatus = getPersistedCheckStatus();
            for(var i = 0; i < aStatus.length; i++) {
                var aPair = aStatus[i].split(':');
                if(aPair[0] == el.id) {
                    // State for this checkbox was already present; replace it
                    aStatus[i] = currentStateFragment;
                    found = true;
                    break;
                }
            }
            if(!found) {
                // State for this checkbox wasn't present; add it
                aStatus.push(currentStateFragment);
            }
            // Now that the array has our info stored, persist it
            setPersistedCheckStatus(aStatus);
        }

        // This function simply returns the checkbox persistence status as
        // an array of strings. "Hides" the fact that the data is stored
        // in a cookie.
        function getPersistedCheckStatus() {
            var stored = getPersistenceCookie();
            return stored.split(',');
        }

        // This function stores an array of strings that represents the 
        // checkbox persistence status. "Hides" the fact that the data is stored
        // in a cookie.
        function setPersistedCheckStatus(aStatus) {
            setPersistenceCookie(aStatus.join(','));
        }

        // Retrieve the value of the persistence cookie.
        function getPersistenceCookie()
        {
          // cookies are separated by semicolons
          var aCookie = document.cookie.split('; ');
          for (var i=0; i < aCookie.length; i++)
          {
            // a name/value pair (a crumb) is separated by an equal sign
            var aCrumb = aCookie[i].split('=');
            if ('JS_PERSISTENCE_COOKIE' == aCrumb[0]) 
              return unescape(aCrumb[1]);
          }
          return ''; // cookie does not exist
        }

        // Sets the value of the persistence cookie.
        // Does not affect other cookies that may be present.
        function setPersistenceCookie(sValue) {
            document.cookie = 'JS_PERSISTENCE_COOKIE=' + escape(sValue);
        }

        // Removes the persistence cookie.
        function clearPersistenceCookie() {
            document.cookie = 'JS_PERSISTENCE_COOKIE=' +
                              ';expires=Fri, 31 Dec 1999 23:59:59 GMT;';
        }
    </script>

</body>
Odpovězeno 20/07/2009 v 17:26
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more