2013-06-27 42 views
0

我对localStorage对象有点困惑。 localStorage是一个对象,显然意味着我们可以创建方法,创建属性和类似普通对象。如何创建localStorage方法

我想弄清楚如何在localStorage内部创建一个方法。 这是我目前有:

localStorage = { 
firstname: function(){ 
     //get the firsname from the input and set it as the localstorage firsname 
     $("#sublog").bind("click", function(){ 
     $("input[name='fName']").val(); 
     }); 
    }, 
    lastname: function(){ 
     //get the lastname from the input and set it as the localStorage lastname 
     $("#sublog").bind("click", function(){ 
     $("input[name='lName']").val(); 
     }); 
    } 
}; 

我的HTML看起来像这样:

<div id="log"> 
    <form> 
     <input type="text" id="fName" name="fName" placeholder="FirstName" /> 
     <input type="text" id="lName" name="lName" placeholder="LastName" /> 
     <input type="submit" id="sublog" name="login" value="Login" /> 
    </form> 

要清楚,我只是想给客户的名字存储到localStorage.firstnamelocalStorage.lastname当客户将他名字和姓氏来保存它们。

回答

1

不幸的是,它不工作的方式。 localStorage对象不是您可以修改以保存值的任意对象 - 相反,您必须使用getItemsetItem方法来存储数据。

例如,下面是经编辑的版本的代码做你想要什么:

function bind_handlers() { 
    $("#sublog").bind("click", function(){ 
     var firstname = $("input[name='fName']").val(); 
     var lastname = $("input[name='lName']").val(); 

     localStorage.setItem('firstname', firstname); 
     localstorage.setItem('lastname', lastname); 
    }); 
} 

,并检索这些值后,只需拨打localStorage.getItem('firstname')localStorage.getItem('lastname')

如果您想要保存数据结构,如{firstname : value, lastname : othervalue},您首先必须将其转换为JSON。一个例子:

function bind_handlers() { 
    $("#sublog").bind("click", function(){ 
     var my_data = { 
      firstname: $("input[name='fName']").val(), 
      lastname: $("input[name='lName']").val() 
     } 

     localStorage.setItem('keyname', JSON.stringify(my_data)); 
    }); 
} 

而对于检索:

var my_data = JSON.parse(localStorage.getItem('keyname')); 
1

它不会这样工作。您必须为您的对象在localStorage集合中分配一个键,并且它可以是功能,只有具有值的对象。您必须JSON.stringify才能解析对象,然后将其插入localStorage。请致电this article

要设置一个对象为localStorage

//set that to localStorage 
localStorage["optArray"] = JSON.stringify(optArray); 

要想从localStorage值,

var store = [undefined, null].indexOf(localStorage["optArray"]) != -1 ? [] : JSON.parse(localStorage["optArray"]); 

在您的情况,您的点击事件必须将其插入localStorage

$("#sublog").bind("click", function() { 
    //set your names in an object 
    var name = { 
     "first": $("input[name='fName']").val(), 
     "last": $("input[name='lName']").val() 
    } 
    //parse it as a string and store it in localStorage 
    localStorage["name"] = JSON.stringify(name); 
    alert("Logged in!"); 
    //now refresh the page - you must see those values in the text box. 
}); 

然后,当页面刷新时,您必须从localStorage获得值并将其设置为文本框。

//page refresh 
//check if value exists in localStorage 
if ([undefined, null].indexOf(localStorage["name"]) == -1) { 
    //exists 
    var name = JSON.parse(localStorage["name"]); 
    $("#fName").val(name["first"]); 
    $("#lName").val(name["last"]); 
} 

演示:http://jsfiddle.net/hungerpain/hgAHs/

+0

好吧,我不能设置这样的变量:var firstname =(input value); var lastname =(输入值),然后将其设置在localStorage中,如下所示:localStorage = {first:firstname,last:lsatname}; ? –

+0

@בועזהוך检查更新的答案 – krishgopinath

1

为什么想要保存在localStorage的功能呢?

通过键值对将数据存储在localStorage中。例如

localStorage.setItem('key','value'); 

,其中键和值是字符串。 您可以通过使用

localStorage.getItem('key'); 

检索使用您的数据或者您可以使用

localStorage.key = 'something' 

var something = localStorage.key; 
4

LocalStorage是指将数据存储在客户端,不与方法过载。你可以这样使用它:

localStorage.foo = "bar"; 
console.log(localStorage.foo); 
>> bar 

如果你需要存储一个对象,你必须将它序列化为一个字符串。

myobject = { 
    foo: 'bar' 
} 
localStorage.myobject = JSON.stringify(myobject); 

而且拿回来这样

myobject = JSON.parse(localStorage.myobject); 

反正功能不能(也不应该)被存储的方式。