我正在使用localstaorage创建一个小应用程序(尚未实现):在文本区域中键入一个注释,它显示在列表中
该注释堆叠在一个名为notes的对象中(以后用于localstorage);
但我的问题是:我可以添加一个注释,但是当我尝试删除它们时,我必须删除我的li和'notes'数组中的相关注释对象,所以我决定使用splice方法,但它以一种奇怪的方式工作......
当我单击“关闭”时,它可以正常工作一两次,但是在某个时刻,数组会保留一个或两个对象...
我尝试了不同的方法来解决问题,但没有成功......
这是小提琴:http://jsfiddle.net/h8hg6/1/
感谢您的帮助
答案 0 :(得分:0)
我已经对你的小提琴进行了一些修改,我认为可以解决这个问题。基本上你错误地使用.splice
,你的数组与你的音符元素不同步。我用基于数字的对象替换了你的数组,因为它更容易处理。以下是一些相关的变化:
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++;
答案 1 :(得分: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
数组的不存在索引上调用splice的时刻,结果没有删除任何内容。基本上,您最终会得到一个不同步的notes
数组。
您需要确保data-queue
属性的值与notes
数组中元素的实际索引一致,以便您对splice(queue,1)
的调用始终成功并删除适当的数组元素。
话虽如此,如果上述答案适合你,我会选择那个。我只是想让你更多地了解正在发生的事情......