11

これが何度か投稿されているのを見たことがありますが、コードをまったく機能させることができませんでした。このドロップダウン メニューの設定を Cookie に保存して、ユーザーが再度サイトにアクセスしたときに以前の選択内容が保持されるようにする必要があります。

落ちる:

<select id="ThemeSelect">
    <option value="zelda">Zelda</option>
    <option value="smb2">SMB 2</option>
</select>

参考までに、このコードは、テーマ セレクターのように CSS コードを変更する Wordpress ウィジェットの Javascript を使用しています。

これをクッキーとして保存するにはどうすればよいですか? 全部試した感じ!

編集:私は言ったはずですが、私はこのコードを使用してCSSを変更します:

var saveclass = null;
var sel = document.getElementById('ThemeSelect');
sel.onchange = function(){
    saveclass = saveclass ? saveclass : document.body.className;
    document.body.className = saveclass + ' ' + sel.value;
};
4

3 に答える 3

12

これらの線に沿った何かがうまくいくはずです。JavaScript を介して Cookie を作成する機能は、javascripter.net の投稿であるJavaScript からの Cookie の設定で見つかりました 。

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();
}

編集

クッキーを保存する

2 つの機能を 1 つに統合しました。

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();
}

ライブデモ

ページに戻ったときに Cookie を読み取る

ダンスモレブに感謝

この質問から恥知らずに盗まれた、この関数を使用して 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;
}

次に、ページの読み込み時に値を選択する必要があります。次のコードはまさにそれを実現します。

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;
});

ライブデモ

于 2012-06-09T02:37:36.527 に答える
3

注:この回答は、JoshMeinの回答に追加されます。自由にマージしてください。

この質問から恥知らずに盗まれたこの関数を使用して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;
}

次に、ページが読み込まれるときに値を選択する必要があります。次のコードはまさにそれを実現します。

document.addEventListener('DOMContentLoaded', function() {
  var themeSelect = document.getElementById('ThemeSelect');
  var selectedTheme = readCookie('theme');

  if (selectedTheme) {
    themeSelect.value = selectedTheme;
  }
});
于 2012-06-09T03:05:10.243 に答える
-1

PHPでセッション変数を作成することを検討する必要があります。

http://www.w3schools.com/php/php_sessions.asp

変数をセッションに保存できます。ページをロードするときに、設定した変数の値を確認します。その値に応じて、ドロップダウンが特定の方法で動作する可能性があります。ドロップダウン項目の名前をセッション変数として保存することはできますか?

于 2012-06-09T02:38:36.450 に答える