javascript - 需要帮助创建可保留当前背景和文本颜色的 cookie

标签 javascript html cookies

我有一个网站,它具有允许用户更改背景颜色的功能,我想制作一个 cookie,在具有此功能的所有页面上保留当前的颜色选择。我不确定我会如何去做这件事。我过去曾使用过 cookie,但那是几年前的事了,我无法再访问该代码,这意味着我无法重新利用它来满足我当前的需求。

下面的代码显示了我用来更改背景和文本颜色的 HTML 和 JavaScript:

<form id="color_change_form" name="color_change_form" method="post">

  <label for="color_change">Select Background Colour</label>
  <select name="color_change_dd" id="color_change_dd">

    <option value="#ffffff">White</option>
    <option value="#000000">Black</option>
    <option value="#CFBD1F">Yellow</option>
    <option value="#B9B537">Celery</option>
    <option value="#92A62B">Grass</option>
    <option value="#7FA78F">Jade</option>
    <option value="#73A8BA">Aqua</option>
    <option value="#7694B6">Sky</option>
    <option value="#8A759C">Purple</option>
    <option value="#BB5988">Magenta</option>
    <option value="#CDACA5">Pink</option>
    <option value="#CFA34A">Orange</option>
    <option value="#C5BAB4">Grey</option>

  </select>

  <input type="button" name="color_change_confirm" id="color_change_confirm" value="Set" onclick="myFunction()" />

</form>


<script>
  function myFunction() {

    var e = document.getElementById("color_change_dd");

    var strUser = e.options[e.selectedIndex].value;

    document.body.style.backgroundColor = strUser;

    localStorage["bgcolor"] = strUser;

    // document.getElementById("current_color").innerHTML = strUser;

  }
</script>

<form id="text_change_form" name="text_change_form" method="post">

  <label for="text_change">Select Text Colour</label>
  <select name="text_change_dd" id="text_change_dd">

    <option value="#000000">Black</option>
    <option value="#ffffff">White</option>
    <option value="#CFBD1F">Yellow</option>
    <option value="#B9B537">Celery</option>
    <option value="#92A62B">Grass</option>
    <option value="#7FA78F">Jade</option>
    <option value="#73A8BA">Aqua</option>
    <option value="#7694B6">Sky</option>
    <option value="#8A759C">Purple</option>
    <option value="#BB5988">Magenta</option>
    <option value="#CDACA5">Pink</option>
    <option value="#CFA34A">Orange</option>
    <option value="#C5BAB4">Grey</option>

  </select>

  <input type="button" name="text_change_confirm" id="text_change_confirm" value="Set" onclick="myFunction2()" />

</form>


<script>
  function myFunction2() {

    var e = document.getElementById("text_change_dd");

    var strUser = e.options[e.selectedIndex].value;

    document.body.style.color = strUser;

    localStorage["textcolor"] = strUser;

    // document.getElementById("current_color").innerHTML = strUser;

  }
</script>

如果有人能为所需的解决方案提供一些示例 JavaScript 代码,我将不胜感激。

预先感谢大家的帮助!

最佳答案

我本来建议使用localStorage,而您似乎正在这样做。

像这样完成您的 localStorage 实现;在这里,我向 document.body.onload 监听器添加了对 myFunction2 的调用,并从 localStorage 加载了颜色:

<html>
  <head>
    <title>Title of the document</title>
  </head>
  <body onload="myFunction2()">
    <!-- <input type="text" id="start" placeholder="start"><br> <input type="text" id="end"><br> <button id ="generate" onclick="run()">Click to Generate</button> -->
    <form id="text_change_form" name="text_change_form" method="post">

      <label for="text_change">Select Text Colour</label>
      <select name="text_change_dd" id="text_change_dd">

        <option value="#000000">Black</option>
        <option value="#ffffff">White</option>
        <option value="#CFBD1F">Yellow</option>
        <option value="#B9B537">Celery</option>
        <option value="#92A62B">Grass</option>
        <option value="#7FA78F">Jade</option>
        <option value="#73A8BA">Aqua</option>
        <option value="#7694B6">Sky</option>
        <option value="#8A759C">Purple</option>
        <option value="#BB5988">Magenta</option>
        <option value="#CDACA5">Pink</option>
        <option value="#CFA34A">Orange</option>
        <option value="#C5BAB4">Grey</option>

      </select>

      <input type="button" name="text_change_confirm" id="text_change_confirm"
        value="Set" onclick="myFunction2()" />

    </form>


    <script>
      function myFunction2() {
        var e = document.getElementById("text_change_dd");
        

        var strUser = e != null && e.selectedIndex ?
                        e.options[e.selectedIndex].value :
                        localStorage["textcolor"];
        if(strUser) {

          document.body.style.color = strUser;
          
          localStorage["textcolor"] = strUser;
        }
      
        // document.getElementById("current_color").innerHTML = strUser;
    
      }
    </script>
  </body>
</html>

您使用 localStorage 而不是 cookie 的原因是因为 localStorage 必须由用户手动清除或由网页覆盖,而 cookie 可能会过期或在服务器端被删除,因此耐用性稍差。 Cookie 也会在服务器和客户端之间来回传输,因此如果数据只需要对客户端重要,请使用 localStorage 或 sessionStorage。

通常,如果某些状态与用户首选项有关,则 Web 存储是最佳选择(因为服务器根本不需要此信息)。

如果您需要跟踪状态(即用户在此页面上单击此、用户以此身份登录、用户完成了该过程的这一部分等),请使用 cookie。

关于javascript - 需要帮助创建可保留当前背景和文本颜色的 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59721304/

相关文章:

android - 在 Android 中,通过多个 Activity 维护 session 的最佳做法是什么?

javascript - Angularjs:对象属性值不更新

javascript - 如何使用 javascript 或 React 检查某些标签中的某些文本在网页上是否可见?

html - 将 ngClass 应用于选择框

javascript - 如何在 TinyMCE 中放置不可编辑的标签或 Div,以便它可以随文本滚动?

cookies - 我可以在 Electron 应用程序中读取 webview 的 cookie 吗?

java - 在 Spring MVC/Security 中设置和读取 cookie

javascript - JQuery 幻灯片似乎不太流畅?

javascript - Jquery Unobtrusive Validation 'Cannot read property ' 类型“未定义”

html - 如何使用 lang 指定输入按钮的语言?