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í ??
Přetrvávání hodnot CheckBox
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.
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);
}
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:
- Kód vyžaduje, aby každý políčko je dán zřetelný atribut id.
- 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.
- 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.
- 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>













