2016-02-26 60 views
2

我想要一个数组(也转换为localStorage值),其中'#textInput'的值每次都添加到localStorage,但是在刷新并输入新值之后,新值不会添加到localStorage,而是替换它。我相信这是因为从用户的刷新数据后,[]设置为空,但不知道如何解决它本地存储值在刷新后重置

var users = new Array(); 
var valueChanger = 1; 

alert(localStorage.getItem('usernames')); 

function addValue() { 
    var newUser = $('#textInput').val(); 
    users.push(newUser); 
    localStorage.setItem('usernames', users); 
    alert(localStorage.getItem('usernames')); 
} 
+2

localStorage的不仅节省了字符串,所以你必须保存和加载以特别的方式非字符串。 json.stringify和json.parse通常使用 – juvian

+0

Juvian说过的话,你也永远不会将值检索到变量。每次页面加载时,用户都会初始化为一个新阵列。您需要在设置时将该值串联起来。解析它并将其设置为获取变量。然后你可以为它增加一个新的价值。 – AtheistP3ace

回答

5

你必须重写代码的形式大致如下,使其工作,

var users = JSON.parse(localStorage.getItem('usernames')) || []; 
var valueChanger = 1; 

alert(localStorage.getItem('usernames')); 

function addValue() { 
    users.push($('#textInput').val()); 
    localStorage.setItem('usernames', JSON.stringify(users)); 
    alert(localStorage.getItem('usernames')); 
} 

由于localStorage只有商店string,我们需要stringify存储前的数组和Parse它在读取之前。

0

您正确的看法是,每次刷新时用户都是空数组。而不是在你的函数中使用新的数组“用户”。从localStorage.setItem('用户名',用户)中获取信息(如果有的话);并将其设置为等于用户。然后,您可以将其他用户推入用户名。

0

每当页面刷新时,您的第一条语句就会创建新数组而不是使用旧数组。

var newUser = localStorage.getItem('usernames') || ""; 
var valueChanger = 1; 
var users = [newUser]; 

alert(localStorage.getItem('usernames')); 

function addValue() { 
    var newUser = $('#textInput').val(); 
    users.push(newUser); 
    localStorage.setItem('usernames', users); 
    alert(localStorage.getItem('usernames')); 
} 

感谢&干杯:)

+0

这是不正确的。您正在从localstorage中抽取数据,就像存储了简单字符串一样,但是您正在将数组写入localstorage。这实际上不起作用。 [Raja的答案](http://stackoverflow.com/a/35659144/211627)正确分析本地存储值。 – JDB