2013-02-21 50 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); 
    } 

在最後一個函數的第二部分中,我試圖在我針對的對象單擊localStorage時將done屬性的值更改爲「true」。然而,當我在Web控制檯中檢查localStorage時,會發生什麼情況,該對象的值不會改變,而是將另一個對象添加到localStorage中,名爲「todosundefined:'true'」。我不明白爲什麼當我單擊某個對象時,將某個東西作爲單獨的未定義對象添加到localStorage中,而不是更改我單擊的對象的值。任何修改它的建議,以便更改我爲localStorage單擊的對象的完成值?localStorage方法

+0

變量'done'未定義。這是錯的。 – 2013-02-21 19:42:51

+0

你會期望'完成'是什麼? DOM元素沒有這樣的屬性。 – Bergi 2013-02-21 19:48:58

+0

done是我分配給該對象的一個​​css類。還有另一個類叫做「notDone」。當課程設置完成時,我想將其更改爲true – user2084813 2013-02-21 19:59:27

回答

0

正如上述評論所述,DOM對象上沒有done屬性。我不完全確定你想要做什麼,但爲了獲得DOM對象的class屬性的內容,你應該使用className屬性。例如:

var done = spanClicked.parentElement.className; 

然後再次,根據您發佈的代碼,這似乎沒有任何意義。我假設您想使用本地存儲來跟蹤待辦事項列表中的哪些項目已完成。在這種情況下,僅僅存儲已完成的所有項目的ID數組(不是更好)還是相反?您不能將數組直接存儲在本地存儲中,但可以使用例如JSON.stringify()來獲取可以存儲的數組的字符串表示形式。

+0

當我檢查本地存儲時,現在我看到:({id:136,task:「get milk」,who:「scott」,dueDate:「今天」,做‘真正的’})。但是,當我輸入localStorage到控制檯時,我再次得到它,除非這樣做是錯誤的,並且有一個單獨的todo項目,其中只有真實的id。我嘗試了其他幾種方法來嘗試做到這一點,並且每次都得到相同的答案。當我輸入localStorage到consel中查看存儲的內容時,我想查看包含所有信息的對象,包括:「true」 – user2084813 2013-02-21 21:59:30

+0

我試過了:for(i = 0; i user2084813 2013-02-21 22:01:20

+0

對不起,但我想我需要查看更多的代碼才能幫助你。也許發佈一個鏈接到[Fiddle](http://jsfiddle.net/)? – 2013-02-22 10:22:54