2016-11-28 328 views
2

我將我的下拉框中的值保存到localstorage中,但我不希望數據在下次用戶從下拉菜單中選擇時用新信息覆蓋,我只是想繼續添加價值對我的本地存儲沒有覆蓋。任何幫助將不勝感激,謝謝。localstorage不斷覆蓋我的數據

JS:

function reason(){ 
     var dropd = document.getElementById("savedrop").value; 
     var drophistory = JSON.parse(localStorage.getItem("savedrop")); 
     localStorage.setItem("reason", JSON.stringify(dropd)); 
    } 

HTML:

<select id="savedrop"> 
        <option value="" disabled="disabled" selected="selected">Please choose one</option> 
        <option value="one">1</option> 
        <option value="two">2</option> 
        <option value="three">3</option> 
       </select> 
<input id="btnbutton" class="btn" type="button" onClick="reason()" value="Submit"> 
+0

你是什麼意思,加入不覆蓋?它是一個數組,並且你想向它推新的值,或者它是一個數字,並且你想將新值與它相加?你可以嘗試更清楚地解釋它嗎? –

+0

這是一個數組,我只是希望它將值(「一個,兩個或三個」)添加到localstorage而不覆蓋。就像用戶在會話中選擇「one」一樣,然後在另一個會話中用戶選擇了「three」,我希望localstorage中的數據顯示「[one three]」等 – michelle9090

回答

3

localStorage數據被保存在字符串的鍵值對。 每次您撥打setItem()它都會添加或覆蓋現有值。 getItem()只是獲取存儲在localStorage這是一個字符串值。要解決這個問題,你必須使用一個數組,stringify它,然後存儲它。 下面是正確的代碼:

function reason(){ 
    var dropd = document.getElementById("savedrop").value; 
    var drophistory = JSON.parse(localStorage.getItem("reason")) || []; 
    drophistory.push(dropd); 
    localStorage.setItem("reason", JSON.stringify(drophistory)); 
} 
+0

謝謝,正是我需要的! – michelle9090

0

首先獲取數據,然後推新值覆蓋它:

function reason(){ 
     var dropd = document.getElementById("savedrop").value; 
     var drophistory = JSON.parse(localStorage.getItem("savedrop")); 
     drophistory.push(droph); 
     localStorage.setItem("reason", JSON.stringify(drophistory)); 
    }