2016-10-26 8 views
0

私はJavaScriptプログラムを作成しています。 3つの入力ボックスを使用して、各入力ボックスに入力した内容をページに表示します。以前の投稿を再印刷するためにローカルストレージを使用していますが、setItem()を使用すると、前回の投稿はすべて上書きされます。それ以前の提出物を保存するには、どうすればいいですか?前の投稿をローカルストレージに保存するJavaScript

JSFiddleをこの投稿と一緒に送信するコードを作成しようとしましたが、コードではコンソールにJSFiddleというエラーが表示されます。それはローカルでうまく動作します。生のコメントと完全にコメントされたコードが下に貼り付けられます。

注:This postは、ローカルストレージではなくセッションストレージを扱うため、重複していません。

コード:

"use strict"; 
 

 
// First we do a self-invoking function that contains everything - there will be nothing 
 
// exposed to the global scope. 
 
(function() { 
 
    var storageArray = []; 
 
    window.onload = retrieve(); 
 

 
    function Credential(name, address, email) { 
 
     this.name = name; 
 
     this.address = address; 
 
     this.email = email; 
 
    } 
 
    var button = document.getElementById("doit"); 
 
    button.onclick = function() { 
 
     /* This function will run when the user clicks on the 
 
     * Save button. */ 
 

 
     //Step #1 - we get values from the form 
 
     var name = document.getElementById("name").value; 
 
     var address = document.getElementById("address").value; 
 
     var email = document.getElementById("email").value; 
 

 
     // Step #2 - you will create a new data object 
 
     var data = { 
 
     name, address, email 
 
     }; 
 

 
     // Step #3 - call on writeRowtoPage() to write your new data object to the page 
 
     writeRowToPage(data, output); 
 
     // Step#4 - Store your object in localStorage (preserving data 
 
     //   that's already in there from prior submissions!) 
 
     storageArray.push(data); 
 
     window.localStorage.setItem("storageArr", JSON.stringify(storageArray)); 
 
    } 
 

 
    /* This function accepts two arguments - 
 
      @dataObject: your data object representing a single 
 
         submission of the data form, which corresponds 
 
         to one row in the table 
 
      @element: the element on the page to which to write the output 
 
    
 
      The function assembles a string of HTML, using the data from 
 
      dataObject. Once the string is complete, it is appended to the 
 
      page using innerHTML. 
 
     */ 
 
    function writeRowToPage(dataObject, element) { 
 
     var s = "<div class=\"info\">"; 
 

 
     s += '<div class="nameDiv">'; 
 
     if (dataObject.name !== 'undefined') { 
 
     s += dataObject.name; 
 
     } 
 
     s += '</div><div class="addrDiv">'; 
 
     if (dataObject.address !== 'undefined') { 
 
     s += dataObject.address; 
 
     } 
 
     s += '</div><div class="emailDiv">'; 
 
     if (dataObject.email !== 'undefined') { 
 
     s += dataObject.email; 
 
     } 
 
     s += '</div></div>'; 
 

 
     element.innerHTML += s; 
 
    } 
 

 

 
    /* Upon page load, look in localStorage for any existing data, create data objects from it, and write those data objects to the page using writeRowToPage(). */ 
 
    var credString = window.localStorage.getItem("storageArr"); 
 
    var credList = JSON.parse(credString); 
 

 
    function retrieve() { 
 
     for (var i = 0; i < credList.length; i++) { 
 
     var newCred = new Credential(credList[i].name, credList[i].address, credList[i].email); 
 
     storageArray.push(newCred); 
 
     writeRowToPage(newCred, 'output'); 
 
     } 
 
    } 
 
    } 
 

 

 
)();
body { 
 
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; 
 
    font-size: 14px; 
 
    line-height: 1.428571429; 
 
    color: #333; 
 
} 
 
.button { 
 
    border: 1px solid #888888; 
 
    color: #ffffff; 
 
    font-family: Arial; 
 
    font-size: 15px; 
 
    font-weight: bold; 
 
    font-style: normal; 
 
    height: 30px; 
 
    width: 82px; 
 
    line-height: 14px; 
 
    padding: .5em; 
 
    text-align: center; 
 
    background-color: #614C26; 
 
} 
 
.button:hover { 
 
    border: 2px solid #000; 
 
} 
 
label { 
 
    display: inline-block; 
 
    width: 5em; 
 
} 
 
.info div { 
 
    display: inline-block; 
 
    width: 10em; 
 
} 
 
.infoHead { 
 
    font-weight: bold; 
 
    border-bottom: 1px solid gray; 
 
    width: 30em; 
 
}
<!doctype html> 
 
<html> 
 

 
<head> 
 

 
    <link rel="stylesheet" href="css/cscie3.css"> 
 
</head> 
 

 
<body> 
 
    <label for="name">Name</label> 
 
    <input type="text" size="40" id="name"> 
 
    <br> 
 
    <label for="address">Address</label> 
 
    <input type="text" size="40" id="address"> 
 
    <br> 
 
    <label for="email">Email</label> 
 
    <input type="text" size="40" id="email"> 
 
    <br> 
 
    <button id="doit" class="button">Save</button> 
 

 
    <h2>My Records</h2> 
 
    <div id="output"> 
 
    <div class="info infoHead"> 
 
     <div>Name</div> 
 
     <div>Address</div> 
 
     <div>Email</div> 
 
    </div> 
 
    </div> 
 

 
    <script tyle="text/javascript" src="js/hw2b_v3.js"></script> 
 
</body> 
 

 
</html>

答えて

1

厥たびページでは、新しい配列を取得してのlocalStorageに新しい値を設定してロードされているため。だからこれを試してください

"use strict"; 

// First we do a self-invoking function that contains everything - there will be nothing 
// exposed to the global scope. 
(function(){ 
    var storageArray = localStorage["storageArr"] ? JSON.parse(localStorage["storageArr"]) : []; 
    window.onload = retrieve(); 
    function Credential (name, address, email) { 
     this.name = name; 
     this.address = address; 
     this.email = email; 
    } 
    var button = document.getElementById("doit"); 
    button.onclick = function(){ 
     /* This function will run when the user clicks on the 
     * Save button. */ 

     //Step #1 - we get values from the form 
     var name = document.getElementById("name").value; 
     var address = document.getElementById("address").value; 
     var email = document.getElementById("email").value; 

     // Step #2 - you will create a new data object 
     var data = {name, address, email}; 

     // Step #3 - call on writeRowtoPage() to write your new data object to the page 
     writeRowToPage(data, output); 
     // Step#4 - Store your object in localStorage (preserving data 
     //   that's already in there from prior submissions!) 
     storageArray.push(data); 
     window.localStorage.setItem("storageArr",JSON.stringify(storageArray)); 
    } 

    /* This function accepts two arguments - 
     @dataObject: your data object representing a single 
        submission of the data form, which corresponds 
        to one row in the table 
     @element: the element on the page to which to write the output 

     The function assembles a string of HTML, using the data from 
     dataObject. Once the string is complete, it is appended to the 
     page using innerHTML. 
    */ 
    function writeRowToPage(dataObject, element) { 
     var s = "<div class=\"info\">"; 

     s+='<div class="nameDiv">'; 
     if (dataObject.name !== 'undefined') { 
      s+=dataObject.name; 
     } 
     s+= '</div><div class="addrDiv">'; 
     if (dataObject.address !== 'undefined') { 
      s+=dataObject.address; 
     } 
     s+= '</div><div class="emailDiv">'; 
     if (dataObject.email !== 'undefined') { 
      s+=dataObject.email; 
     } 
     s+= '</div></div>'; 

     element.innerHTML += s; 
    } 


    /* Upon page load, look in localStorage for any existing data, create data objects from it, and write those data objects to the page using writeRowToPage(). */ 
    var credString = window.localStorage.getItem("storageArr"); 
    var credList = JSON.parse(credString); 
    function retrieve() { 
     for (var i = 0; i < credList.length; i++) { 
      var newCred = new Credential(credList[i].name, credList[i].address, credList[i].email); 
      storageArray.push(newCred); 
      writeRowToPage(newCred, 'output'); 
     } 
    } 
} 


)(); 
+0

申し訳ありません、それは私のために働く!ありがとうございました! – brld

関連する問題