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);
    }

最後の関数の 2 番目の部分では、localStorage で対象のオブジェクトがクリックされたときに、done プロパティの値を「true」に変更しようとしています。代わりに、Web コンソールで localStorage をチェックすると、そのオブジェクトの値は変更されず、代わりに "todosundefined: 'true'" という別のオブジェクトが localStorage に追加されます。オブジェクトをクリックすると、クリックしたオブジェクトの値を変更するのではなく、別の未定義のオブジェクトとして localStorage に何かが追加される理由がわかりません。localStorage でクリックしたオブジェクトの完了値を変更するように変更するための提案はありますか?

4

1 に答える 1

0

上記のコメントで述べたように、doneDOM オブジェクトにはプロパティがありません。何をしようとしているのかよくわかりませんが、DOM オブジェクトの class 属性の内容を取得するには、classNameプロパティを使用する必要があります。例えば:

var done = spanClicked.parentElement.className;

繰り返しますが、投稿したコードに基づいて意味をなさないようです。todo のリストのどの項目が完了したかを追跡するために、ローカル ストレージを使用したいと考えています。その場合、完了したすべての項目の ID の配列を格納するだけの方がよいのではないでしょうか (またはその逆)。配列をローカル ストレージに直接保存することはできませんが、たとえば、JSON.stringify() を使用して、保存できる配列の文字列表現を取得できます。

于 2013-02-21T21:06:02.177 に答える