【问题标题】:How to edit this jQuery to also save its changes to localStorage?如何编辑此 jQuery 以将其更改保存到 localStorage?
【发布时间】:2022-01-22 01:00:47
【问题描述】:

当我选中它的复选框时,这个 jQuery 可以很好地更改具有相同类 (userNumber1) 的所有 div 的背景颜色,但我还需要它来将这些更改保存到 localStorage,在每次加载新页面时都会出现在此处。

在 SO 中搜索了一周后,我尝试了几种不同的选项,但没有一个可以正常工作。虽然在大多数情况下我仍然可以更改背景颜色,但其中一些只保存选中的复选框而不保存背景颜色,另一些则相反,但大多数都没有将两者保存到 localStorage。

由于我根本不是专家,我真的不知道现在还能做什么。

这是我的 jQuery 函数:

jQuery(document).ready(function($) {
    $('#option1').on('change', function() {
        if ($(this).is(':checked')) {
            $(".userNumber1").css('background-color', "#a7ddff");
        } else {
            $(".userNumber1").css('background-color', "#ffffff");
        }
    })
})

这是我的 HTML 代码:

<div class="userNumber1"><input type="checkbox" id="option1"><label for="option1"></label></div>

我完全愿意接受任何不同的方法,只要我可以将新的背景颜色和选中/未选中的复选框保存到 localStorage

提前感谢您的支持。

【问题讨论】:

  • 您能否包括一次(或多次)使用本地存储的尝试?

标签: javascript jquery


【解决方案1】:

这是一个工作版本 - 由于沙盒,我们无法在 Stackoverflow 测试 localStorage

https://plungjan.name/SO/lschk/

您需要将存储的字符串“true”或“false”转换为布尔值

脚本

// assuming a not set localStorage means a not checked checkbox at load time
let un1 = localStorage.getItem("userNumber1")

un1 = un1 === null ? false : un1 === "true"; // convert the string stored to boolean

jQuery(document).ready(function($) {
  const $opt1 = $('#option1');

  const changeColor = () => { // make a reusable function 
    const chk = $opt1.is(':checked');
    localStorage.setItem("userNumber1", chk)
    $(".userNumber1").css({
      "background-color": chk ? "lightblue" : "yellow"
    })
  };
  
  $opt1
    .prop("checked", un1)       // set the value from localStorage
    .on('change', changeColor); // assign the listener
  changeColor(); // trigger the initial
})

CSS

.userNumber1 {
  background-color: yellow;
}

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>


<div class="userNumber1">
  <label><input type="checkbox" id="option1">Check me</label>
</div>

【讨论】:

    【解决方案2】:

    当用户点击一个选项时,用你的值设置一个本地存储键:

    localStorage.setItem('backgroundColor', '#FF00BB');
    localStorage.setItem('optionId', 'option1');
    

    在页面加载时检索值。同时选中相应的复选框:

    $('.userNumber1').css('background-color', localStorage.getItem('backgroundColor'));
    $('#'+localStorage.getItem('optionId')).prop('checked', true);
    

    来源:Setting "checked" for a checkbox with jQuery

    【讨论】:

    • @rx65m 没问题。第二组两行就在 jQuery 就绪函数内部。前两行需要在用户单击 DOM 元素时运行。
    • 不幸的是它没有保存更改。
    • 按 F12 并在浏览器中运行这些行,您可以看到项目已保存和检索: localStorage.setItem('backgroundColor', '#FF00BB'); localStorage.getItem('backgroundColor');适用于 Chrome、Firefox 和 Edge。可能无法在默认的 Windows 95 浏览器上运行。
    【解决方案3】:
    jQuery(document).ready(function($) {
    const myData = localstorage.getItem('myData') ? JSON.parse(localstorage.getItem('myData')) : {'checked':false,'backgroundColor':'#ffffff'};
    $("#option1").attr('checked', myData.checked);
    $(".userNumber1").css('background-color', myData.backgroundColor);
    
    $('#option1').on('change', function() {
        myData = {}
        if ($(this).is(':checked')) {
            $(".userNumber1").css('background-color', "#a7ddff");
            myData.checked=true;
            myData.backgroundColor = "#a7ddff";
        } else {
            $(".userNumber1").css('background-color', "#ffffff");
            myData.checked=false;
            myData.backgroundColor = "#ffffff";
        }
       localstorage.setItem('myData',JSON.stringify(myData))
       }) 
    })
    

    【讨论】:

    • 非常感谢。这会保存选中的复选框,但不会保存更改的背景颜色。
    • 您可以使用存储 JSON 而不是可以同时保存复选框和背景颜色的字符串
    • 你能告诉我怎么做吗?我不知道。
    • 现在更新了我的答案,请检查
    • 你从代码中输入了这个:})
    猜你喜欢
    • 1970-01-01
    • 2022-06-13
    • 2022-06-15
    • 2017-11-03
    • 1970-01-01
    • 2016-07-22
    • 2017-05-10
    • 2013-10-23
    相关资源
    最近更新 更多