Algo a lo largo de estas líneas debe trabajar para usted. La función para crear una cookie mediante javascript se encontró en Setting a Cookie from JavaScript, una publicación en javascripter.net.
HTML:
<select id="ThemeSelect" onchange="setCookie('theme', this.value, 365);">
<option value="zelda">Zelda</option>
<option value="smb2">SMB 2</option>
</select>
Javascript:
function setCookie(cookieName, cookieValue, nDays) {
var today = new Date();
var expire = new Date();
if (!nDays)
nDays=1;
expire.setTime(today.getTime() + 3600000*24*nDays);
document.cookie = cookieName+"="+escape(cookieValue) + ";expires="+expire.toGMTString();
}
Editar:
Guardar la cookie
He combinado las dos funciones en una para usted.
HTML:
<select id="ThemeSelect" onchange="saveTheme(this.value);">
<option value="zelda">Zelda</option>
<option value="smb2">SMB 2</option>
</select>
Javascript:
var saveclass = null;
function saveTheme(cookieValue)
{
var sel = document.getElementById('ThemeSelect');
saveclass = saveclass ? saveclass : document.body.className;
document.body.className = saveclass + ' ' + sel.value;
setCookie('theme', cookieValue, 365);
}
function setCookie(cookieName, cookieValue, nDays) {
var today = new Date();
var expire = new Date();
if (nDays==null || nDays==0)
nDays=1;
expire.setTime(today.getTime() + 3600000*24*nDays);
document.cookie = cookieName+"="+escape(cookieValue) + ";expires="+expire.toGMTString();
}
Live DEMO
Leer la cookie en el retorno a la página
Gracias a dunsmoreb
Podemos obtener la cookie mediante esta función, shamelessly stolen from this question.
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;
}
Luego tenemos que seleccionar el valor cuando se carga la página. El siguiente código lograr precisamente eso:
document.addEventListener('DOMContentLoaded', function() {
var themeSelect = document.getElementById('ThemeSelect');
var selectedTheme = readCookie('theme');
themeSelect.value = selectedTheme;
saveclass = saveclass ? saveclass : document.body.className;
document.body.className = saveclass + ' ' + selectedTheme;
});
Live DEMO
Puedo sugerir el cambio: 'if (nDays == null || nDays == 0)' to 'if (! NDays)'? De esta forma se comprueba contra nulo, cero e indefinido. –
Gracias por la sugerencia. Actualicé el código. –
Para mí, eso se ve completamente perfecto, sin embargo, cuando lo puse en una página de prueba, no tengo idea de por qué no funciona. http://dcvidya.com/testing/ es la página, por cierto. ¿Estoy haciendo algo mal? – DANCUBE