2013-02-21 4 views
0
function Todo(id, task, who, dueDate) { 
    this.id = id; 
    this.task = task; 
    this.who = who; 
    this.dueDate = dueDate; 
    this.done = false; 
}  

function updateDone(e) { 
     var spanClicked = e.target; 
     var id = spanClicked.parentElement.id; 
     var done = spanClicked.parentElement.done; 
     spanClicked.innerHTML = " ✔ "; 
     spanClicked.setAttribute("class", "done"); 

     var key = "todos" + done; 
     localStorage.setItem(key, "true"); 
     console.log(key); 
    } 

Dans la deuxième partie de la dernière fonction, j'essaie de changer la valeur de la propriété done en "true" lorsque l'objet que je cible est cliqué pour localStorage. Ce qui se passe à la place c'est quand je vérifie localStorage dans la console web que la valeur de cet objet ne change pas et qu'un autre objet est ajouté au localStorage appelé "todosundefined: 'true'". Je ne comprends pas pourquoi lorsque je clique sur un objet, quelque chose est ajouté au localStorage en tant qu'objet séparé, non défini, au lieu de changer la valeur de l'objet sur lequel j'ai cliqué. Des suggestions pour le modifier afin que je change la valeur de l'objet sur lequel je clique pour localStorage?méthodes localStorage

+0

La variable 'done' est indéfinie. C'est ce qui ne va pas. –

+0

À quoi s'attendreiez-vous? Les éléments DOM n'ont pas de telles propriétés. – Bergi

+0

done est une classe css que j'ai assignée à l'objet. il y a une autre classe appelée "notDone". quand la classe est définie sur fait, je veux le changer en vrai – user2084813

Répondre

0

Comme mentionné dans les commentaires ci-dessus, il n'y a pas de propriété done sur les objets DOM. Je ne suis pas entièrement sûr de ce que vous essayez de faire, mais pour obtenir le contenu de l'attribut de classe d'un objet DOM, vous devez utiliser la propriété className. E.g:

var done = spanClicked.parentElement.className; 

Ensuite, cela ne semble pas avoir de sens en fonction du code que vous avez publié. Je suppose que vous voulez utiliser le stockage local pour suivre les éléments d'une liste de tâches. Dans ce cas, ne serait-il pas préférable de simplement stocker un tableau d'id de tous les éléments qui sont faits (ou l'inverse)? Vous ne pouvez pas stocker un tableau directement dans le stockage local, mais vous pouvez utiliser, par exemple, JSON.stringify() pour obtenir une représentation sous forme de chaîne du tableau que vous pouvez ensuite stocker.

+0

Quand je vérifie le stockage local maintenant c'est ce que je vois: ({id: 136, tâche: "get milk", qui: "scott", dueDate: " aujourd'hui ", fait:" vrai "}). Mais, quand je tape localStorage à la console, je reçois à nouveau, sauf done est faux et il y a un élément todo séparé, avec le même id qui dit juste vrai. J'ai essayé plusieurs autres façons d'essayer et j'ai toujours la même réponse. quand je tape localStorage dans le consel pour voir ce qui est stocké je veux voir l'objet avec toutes les informations y compris fait: "vrai" – user2084813

+0

J'ai essayé: pour (i = 0; i user2084813

+0

Je suis désolé, mais je pense que j'ai besoin de voir plus de code pour vous aider. Peut-être poster un lien vers un [Fiddle] (http://jsfiddle.net/)? –