2014-07-14 82 views
0

我只是盯着建立一个列表。我的做法是将数据保存在第一个选项卡中并在第二个选项卡上显示。我能够将数据保存到本地存储。但是数据越来越难以满足我的需求。任何想法,我犯了错误。值正在越过wile保存数据到本地存储

这里是我的jsfiddle

http://jsfiddle.net/saorabh/RmCA7/

使用了HTML是

<form id="todo-form"> 
       <input type="text" name="t_title" id="t_title" placeholder="Title" /> 
       <textarea placeholder="Description" name="t_description" id="t_description"></textarea> 
       <input type="button" class="btn btn-primary" value="Add Task"/> 
       </form> 

要保存的数据我的JavaScript

$(".btn-primary").click(function(){ 
    var formId = ("todo-form"); 
var inputs = $("#" + formId + " :input"), 
      id, title, description, tempData, 
      data = {} ; 

     title = inputs[0].value; 
     description = inputs[1].value; 

     id = new Date().getTime(); 

     tempData = { 
      id : id, 
      title: title, 
      description: description 
     }; 

     // Saving element in local storage 
     data[id] = tempData; 
     localStorage.setItem("todoData", JSON.stringify(tempData)); 

}); 
+0

'localStorage.setItem(“todoData”,JSON.stringify(tempData));' - 我记得,localStorage像散列表一样工作。所以每次你重写相同密钥的值。所以你在localStorage中总是只有一对(键 - 值)。您应该使用不同的键或将数值作为数组,将新数据添加到此数组的末尾 – Regent

+0

您正在为同一个key = todoData保存数据,因此每次单击按钮时它都会覆盖。使用不同的键进行不同的点击。 –

+0

是的,这就是为什么我生成id = new Date()。getTime()。使每个条目都独一无二。 – Soarabh

回答

1

的localStorage的是键/值对存储,所以对于每个键你只能有一个值。

您总是将该值设置为“todoData”键,因此您总是将最后一个值替换为当前值。

如果您打算只对一个数据使用一个密钥,那么您应该从LocalStore中解析出您的JSON,然后附加第二个项目并将它们再次存储在LocalStorage上。或者你可以使用多个键。

除此之外,还有在你的代码的两个问题:

  • 要保存错了对象,你应该保存data而不是 tempData
  • 你是不是从 localStorage的重现data对象当页面加载时

http://jsfiddle.net/RmCA7/4/

+0

可以提供jsFiddle吗? –

+0

我更新了答案 – Luizgrs