Html本地存储未正确输入

时间:2014-12-19 16:13:07

标签: jquery html

CODE:

$(document).ready(function () {
    window.levelsSaved = 1;
$('#button1').click() {
    levelsSaved = [1, 2]
}

function checkLevels() {
    localStorage.savedLevels = JSON.stringify(levelsSaved);
    if (localStorage.savedLevels == [1, 2]) {
        $('#button2').show();
    }
  }
});

问题:

代码的问题是当你转到本地存储(f12)。

它已经设置为[1,2],甚至没有点击按钮,按钮只是一个占位符,当你完成第一级时,下一个按钮将显示为2级。

它将使用.show()显示但是当你刷新时我希望第二级按钮保持在那里而不是隐藏。

谢谢你,请看一下jsFiddle它包含更多代码的详细信息,如html和CSS。

1 个答案:

答案 0 :(得分:0)

JSON.stringify([1, 2])给了我们"[1,2]"。然后,如果将其与数组进行比较,则会导致调用数组的toStringArray#toString只是Array#join,它会给你"1,2"(注意缺少[])。所以比较永远不会成真。

如果你想比较它们,并且它们总是简单的数字,你可以在数组上使用JSON.stringify并比较字符串;或者如果它们比这更复杂,你将需要使用几种阵列比较算法中的任何一种。

免费字符串示例:

var items = [1, 2];
snippet.log(JSON.stringify(items)); // [1,2]
snippet.log(String(items));         // 1,2
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

根本不清楚为什么你想要一个数组,但这里有一个如何使用本地存储存储和检索数组的示例:Live Copy (Stack Snippets禁止本地存储,所以JSBin上的实时副本已经结束了

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Example</title>
</head>
<body>
<script>
  (function() {
    "use strict";
    // Get the array from local storage. If we've never stored
    // an array before, `localStorage.theArray` will be
    // `undefined`, so we use || "[]" to parse a blank array.
    var theArray = JSON.parse(localStorage.theArray || "[]");

    // Show its contents
    showArray("Array from local storage:", theArray);

    // Add a random number to the end
    theArray.push(Math.floor(Math.random() * 10));

    // Save the array
    localStorage.theArray = JSON.stringify(theArray);

    // Show what we saved to local storage
    showArray("Array we saved to local storage:", theArray);

    display("Now hit refresh and you'll see the stored copy has the number we added.");

    function showArray(msg, a) {
      display(msg + " (" + a.length + ")");
      a.forEach(function(entry, index) {
        display(index + ": " + entry);
      });
    }

    function display(msg) {
      var p = document.createElement('p');
      p.innerHTML = String(msg);
      document.body.appendChild(p);
    }
  })();
</script>
</body>
</html>