Jag skulle behöva hjälp med cookies i en funktion som byter stilmallar utan skript i HTML-koden.
Funktionen med att byta stilmallar med drop-down menyn "change" i <select> taggarna fungerar som den ska utan att jag använder javascript i html-koden. Men hur får man det att sparas i cookies så att när laddar om sidan så är den stilmallen man senast valt inställd? Nu när man laddar om väljer den automatiskt den första.
Jag har testat olika metoder som att använda onclick i html-koden och göra stilmalls-bytet genom länkar, <a>, istället och då sparas det i cookies. Men hur ska man göra för att i detta fall få det att sparas när väljer i drop-down menyn och sköta allt via det externa javascriptet?
Stilmallar:
[kod]<link rel="stylesheet" type="text/css" href="css/1.css" title="1">
<link rel="alternate stylesheet" type="text/css" href="css/2.css" title="2">
<link rel="alternate stylesheet" type="text/css" href="css/3.css" title="3">
<link rel="alternate stylesheet" type="text/css" href="css/4.css" title="4">[/kod]
HTML:
[kod]<select name="change" id="change">
<option id="s0" value="1">Standard</option>
<option id="s1" value="2">Utseende 2</option>
<option id="s2" value="3">Utseende 3</option>
<option id="s3" value="4">Utseende 4</option>
</select>[/kod]
JavaScript:
[kod]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 chooseStyle(style) {
createCookie("style", style, 30);
var title = document.getElementById("change").value;
var theLinks = document.getElementsByTagName("link");
for(i = 0; i < theLinks.length; i++) {
var a = theLinks[i];
if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
a.disabled = true;
if(a.getAttribute("title") == title) a.disabled = false;
}
}
}
function pageLoaded(){
var styleCookie = document.getElementById("change");
styleCookie.onchange = chooseStyle;
var style = readCookie("style");
if (style == null){
style = 0;
}
chooseStyle(style);
}
window.onload = pageLoaded;[/kod]
Funktionen med att byta stilmallar med drop-down menyn "change" i <select> taggarna fungerar som den ska utan att jag använder javascript i html-koden. Men hur får man det att sparas i cookies så att när laddar om sidan så är den stilmallen man senast valt inställd? Nu när man laddar om väljer den automatiskt den första.
Jag har testat olika metoder som att använda onclick i html-koden och göra stilmalls-bytet genom länkar, <a>, istället och då sparas det i cookies. Men hur ska man göra för att i detta fall få det att sparas när väljer i drop-down menyn och sköta allt via det externa javascriptet?
Stilmallar:
[kod]<link rel="stylesheet" type="text/css" href="css/1.css" title="1">
<link rel="alternate stylesheet" type="text/css" href="css/2.css" title="2">
<link rel="alternate stylesheet" type="text/css" href="css/3.css" title="3">
<link rel="alternate stylesheet" type="text/css" href="css/4.css" title="4">[/kod]
HTML:
[kod]<select name="change" id="change">
<option id="s0" value="1">Standard</option>
<option id="s1" value="2">Utseende 2</option>
<option id="s2" value="3">Utseende 3</option>
<option id="s3" value="4">Utseende 4</option>
</select>[/kod]
JavaScript:
[kod]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 chooseStyle(style) {
createCookie("style", style, 30);
var title = document.getElementById("change").value;
var theLinks = document.getElementsByTagName("link");
for(i = 0; i < theLinks.length; i++) {
var a = theLinks[i];
if(a.getAttribute("rel").indexOf("style") != -1 && a.getAttribute("title")) {
a.disabled = true;
if(a.getAttribute("title") == title) a.disabled = false;
}
}
}
function pageLoaded(){
var styleCookie = document.getElementById("change");
styleCookie.onchange = chooseStyle;
var style = readCookie("style");
if (style == null){
style = 0;
}
chooseStyle(style);
}
window.onload = pageLoaded;[/kod]
n
Comment