2010-05-14 24 views
3

Est-il possible que le même nom utilisé puisse avoir plusieurs valeurs différentes stockées séparément et être affichées dans une liste?Stockages multiples utilisant localStorage

Par exemple:

function save() 
{ 
    var inputfield = document.getElementById('field').innerHTML; 
    localStorage['justified'] = inputfield; 
} 

<input type="text" id="field" onclick="save();" /> 

Chaque fois que quelqu'un pénètre quelque chose dans le champ de saisie et cliquez sur Enregistrer, le localStorage enregistre uniquement la valeur du même nom, cependant, le fait de ce conflit le stockage de manière sont enregistrées , comme étant remplacé par la dernière valeur d'entrée?

De même, existe-t-il un moyen d'empêcher l'effacement du localstorage lors de l'effacement du cache?

Répondre

1

Ceci est quelque chose de facile à déterminer avec une page de test très simple. Vous ne pouvez stocker qu'une valeur par clé et les valeurs ne sont pas effacées lorsque le cache est effacé. (Je l'ai juste essayé Firefox jusqu'à présent ...)

Vous pouvez stocker une liste de valeurs dans une seule touche en écrivant votre propre fonction pour le faire:

function addToPersistentList(listName, value) { 
    var val = localStorage[listName] || []; 
    val.push(value); 
    localStorage[listName] = val; // THIS DOES NOT WORK 
} 

modifier oops il ne prend en charge les chaînes stockées; merde. OK bien si vous avez json2 vous feriez ceci:

function addToPersistentList(listName, value) { 
    var val = localStorage[listName] ? JSON.parse(localStorage[listName]) : []; 
    val.push(value.toString()); 
    localStorage[listName] = JSON.stringify(val); 
} 

Bien sûr, cela provoque des problèmes si vous voulez stocker les dates etc.

+0

Essayé Chrome, l'effacement du cache n'efface pas les données. Mais effacer les cookies "..et autres données du navigateur" l'efface. – JeroenEijkhof

0

Non, vous pouvez enregistrer qu'une seule valeur dans une entrée de localStorage.

Il y a deux façons de stocker plusieurs valeurs derrière un mot-clé:

  1. Utilisez localStorage['justified_0'], localStorage['justified_1'] etcetera.
  2. Stockez plusieurs valeurs dans un tableau et convertissez-le en JSON avant de le stocker dans localStorage['justified'] et de le convertir en tableau après lecture.

L'effacement du cache n'efface pas le stockage local.

7

En fait, localStorage 'devrait' être capable de stocker des entiers, des chaînes et des tableaux. Je travaille sur une application de bloc-notes en utilisant localStorage et enregistrer toutes mes données en utilisant l'objet littéraux:

var someData = { 
    withvars: "and values", 
    init: function() { 
     // not sure if this works but it should. 
    }, 
    var1: { 
     subvar1: "data", 
     subvar2: "data2" 
    } 
}; 

magasin, puis à l'aide JSON.stringify():

localStorage.setItem(varName, JSON.stringify(someData)); 

puis y accéder plus tard avec JSON. analyser():

var dataBack = JSON.parse(localStorage.getItem("varName")); 

Si vous utilisez toujours littéraux objet alors vous aurez moins de mal à garder une trace de la façon de stocker et comment récupérer des données à partir localStorage.