2012-07-17 59 views
0

我正在做一個小appwith localstaorage(尚未實施):您INT文本區域的說明文字,它是顯示在列表的javascript從一個數組刪除項目,拼接

說明堆疊在對象稱爲筆記(將來用於本地存儲);

但我的問題是:我可以添加一個筆記,但是當我嘗試刪除它們時,我必須在筆記數組中刪除我的li和相關的筆記對象,所以我決定使用拼接方法,但它工作在陌生的路上......

當我點擊「關閉」,它工作正常,一次或兩次,但在此刻停留陣列與一個或兩份對象...

我嘗試了不同的方法來解決問題但沒有成功...

這裏是小提琴:http://jsfiddle.net/h8hg6/1/

感謝您的幫助

+1

發佈相關的代碼以及它的鏈接 – jbabey 2012-07-17 17:12:10

+0

在功能上它似乎使用你的小提琴工作正常。我不清楚實際問題。 – 2012-07-17 17:14:50

+0

'addNoteToPage'中的'note'變量是一個隱式的全局變量,不確定它是否與問題有關。 – jbabey 2012-07-17 17:15:10

回答

0

我對你的小提琴做了一些修改,我認爲解決了這個問題。實際上,您錯誤地使用.splice,並且您的陣列與您的筆記元素不同步。我用一個基於數字的對象替換了你的數組,因爲它更容易處理。下面是一些相關的變化:

http://jsfiddle.net/h8hg6/2/

var notes = {}; // notes is now an object instead of an array 
// snip 

var number = jQuery(this).parents('li').data('number'); 
delete notes[number]; // this is how you remove properties from an object 

// snip 
var note = { 
    color: color, 
    text: text 
}; 

notes[i] = note; // add this object as a property of the notes object 
i++; 
+0

非常感謝,但如果我把5注,我關閉它們,數組永遠不會是空的,至少有兩個項目... – user1521149 2012-07-17 17:46:33

+0

@ user1521149根據控制檯在鉻,它的工作完美。 – jbabey 2012-07-17 17:47:39

+0

我在關閉註釋後仍然看到對象: -/ – user1521149 2012-07-17 17:59:07

0

的問題是,你要splice調用使用queue變量的值,以確定將在notes數組中移除元素的索引。就在這裏:

notes.splice(queue, 1); 

由於queue值總是增加(在這裏):

function addNoteToPage(){ 
    i++; 
    ... 
    jQuery('ul#notes li:first').before('<li data-queue="'+ i +'">'+ note.text +' <a href=""#>CLOSE</a> 

你打,你叫剪接的notes陣列並沒有什麼的一個不存在的索引是一個時刻因此被刪除。基本上,你最終會得到一個不同步的notes陣列。

您需要確保data-queue屬性的值與notes數組中元素的實際索引一致,以便您對splice(queue,1)的調用總是成功並刪除相應的數組元素。這樣說,如果上面的答案適合你,我會選擇那個。我只是想給你更多的關於發生了什麼...

+0

thansk很多,是的,我已經看到了我的錯誤2分鐘前,所以我嘗試另一種方式:我股票的文字的筆記和比較note.text。它的作品,但也有其他問題...如果我輸入5相同的筆記,行爲是stange: -/http://jsfiddle.net/h8hg6/2/ – user1521149 2012-07-17 17:51:43