保存cookie中的下拉菜单选项?

DAN*_*UBE 11 javascript css cookies menu

我已经看过几次这个帖子了,但我根本无法得到代码.我需要帮助制作此下拉菜单将其设置保存到cookie,因此当用户再次访问该网站时,将保留其先前的选择.

落下:

<select id="ThemeSelect">
    <option value="zelda">Zelda</option>
    <option value="smb2">SMB 2</option>
</select>
Run Code Online (Sandbox Code Playgroud)

作为参考,此代码与Wordpress小部件中的一些Javascript一起更改css代码,如主题选择器.

我如何将此保存为cookie?我觉得我已经尝试了一切!

编辑:我应该说,但我用这段代码来改变CSS:

var saveclass = null;
var sel = document.getElementById('ThemeSelect');
sel.onchange = function(){
    saveclass = saveclass ? saveclass : document.body.className;
    document.body.className = saveclass + ' ' + sel.value;
};
Run Code Online (Sandbox Code Playgroud)

Jos*_*ein 12

这些方面的东西应该适合你.通过javascript创建cookie的功能可以在JavaScript设置Cookie,javascripter.net上的帖子中找到.

HTML:

<select id="ThemeSelect" onchange="setCookie('theme', this.value, 365);">
    <option value="zelda">Zelda</option>
    <option value="smb2">SMB 2</option>
</select>
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)

编辑:

保存cookie

我已经将这两个函数合并为一个.

HTML:

<select id="ThemeSelect" onchange="saveTheme(this.value);">
    <option value="zelda">Zelda</option>
    <option value="smb2">SMB 2</option>
</select>
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)

现场演示

在返回页面时阅读cookie

感谢dunsmoreb

我们可以使用此功能获取cookie,从这个问题中无耻地窃取.

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;
}
Run Code Online (Sandbox Code Playgroud)

然后我们需要在页面加载时选择值.以下代码将完成:

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;
});
Run Code Online (Sandbox Code Playgroud)

现场演示

  • @DANCUBE函数的名称是`SetCookie`,你正在调用`setCookie`.案件很重要. (2认同)