Get/set 数值到本地存储

Get/set number value to localstorage

我正在尝试使用本地存储来存储一个数字,这样即使我刷新或重新访问该页面它也会保留,但每当我刷新时 return 值为 0。

我知道这可能是一个我无法弄清楚的非常简单的修复方法,但我非常感谢能回答这个初学者(可能)简单的问题。

如果您想知道这是星级评分系统。

HTML:

<p id="r1"></p>

jQuery:

$(document).ready(function(){
    var x1;
    x1 = +localStorage.getItem("x1");
    $("#r1").html("Your rating: " + x1);

    $("#rating1 span").click(function() {
        x1 = 5 - $(this).index();
        $("#r1").html("Your rating: " + x1);
    });

    localStorage.setItem("x1", x1);
});

这是因为 x1 未定义。所以你实际上在做的是 localStorage.getItem(undefined)。这个 returns null,因为你有一个加号,它正在将 null 转换为 0。

 +null == 0; // true

您似乎对 localStorage 方法的工作原理有点困惑。基本上你需要两件事:一个键和一个你想分配给它的值。我会给你一个简单的例子来说明它是如何工作的。

const key = 'taco';
let value = 'sauce';

localStorage  // {se:fkey: "c6d8756477bc8eb22494f28a5bbc3afc,1464967104", length: 1}

// Now let's say I want to save this to local storage. This is how.
localStorage.setItem(key, value);

localStorage // {se:fkey: "c6d8756477bc8eb22494f28a5bbc3afc,1464967104", taco: "sauce", length: 2}  . As you can see it is now in localStorage.

// Now let's say we want to retrieve what we set from localStorage.
localStorage.getItem(key); // 'sauce'

希望对您有所帮助。

第一个问题是当您使用 getItem 检索本地存储项目时,您没有提供它的名称,应该是 localStorage.getItem("x1").

第二个问题是您在加载页面时调用 setItem(),而不是在用户点击评级时调用,因此它没有使用用户选择的评级。

$(document).ready(function(){
    var x1;
    x1 = +localStorage.getItem("x1");
    $("#r1").html("Your rating: " + x1);

    $("#rating1 span").click(function() {
        var x1 = 5 - $(this).index();
        $("#r1").html("Your rating: " + x1);
        localStorage.setItem("x1", x1);
    });
});

目前您正在请求密钥 undefined 的本地存储值,因为 x1 没有值。如果您将 x1 更改为字符串,您将获得键 "x1" 的值(如果存在)。

因此您的代码将变为:

$(document).ready(function(){

    var x1 = localStorage.getItem("x1");

    $("#r1").html("Your rating: " + x1);

    $("#rating1 span").click(function() {
        x1 = 5 - $(this).index();
        $("#r1").html("Your rating: " + x1);
        localStorage.setItem("x1", x1);
    });


});

你的 localStorage.setItem("x1", x1); 是正确的,但在错误的位置,它需要在点击事件块内。