removeItem localStorage не работает

74
7

Я хочу удалить элемент в массиве, но он не удаляется. У меня есть идентификатор элемента, но я не могу его использовать. Можете ли вы показать мне, как я могу использовать идентификатор элемента в массиве tasks?

function appendTaskToList(val, task_id) {
$('#list').append($("<li> <a href='#' class='done-btn'>Done</a>" +
" " + val + " <a href='javascript:void(0)' class='cancel-btn'>Delete</a></li>")
.data("task", task_id));
}

if (localStorage['tasks']) {

var tasks = JSON.parse(localStorage['tasks']);
for(var i=0;i<tasks.length;i++) {
appendTaskToList(tasks[i], i);
}

}else {

var tasks = [];
}

var addTask = function(){
var val = $('#name').val();
tasks.push(val);
var task_id = tasks.indexOf(val);
localStorage["tasks"] = JSON.stringify(tasks);
appendTaskToList(val, task_id);
$('#name').val("").focus();
};

$('#add-btn').click(addTask);

$('#name').keyup(function(e){
if (e.keyCode === 13) {
addTask();
}

});

$(document).delegate('.done-btn', 'click', function() {
$(this).parent('li').addClass('done');
return false;
});

Я застрял здесь:

$(document).delegate('.cancel-btn', 'click', function(e) {
var task_elem = $(e.target).closest("li");

console.log(task_elem.data());
var taks_id = task_elem.data();
$(this).parent('li').remove();

localStorage.removeItem(tasks[taks_id]);

});

спросил(а) 2015-07-21T17:58:00+03:00 5 лет, 7 месяцев назад
1
Решение
62

У вас есть только одно свойство localStorage, которое является "tasks".

Значение этого свойства - это json you stringify.

В строке localStorage.removeItem(tasks[taks_id]); значение tasks[taks_id] не является "tasks".

Поэтому вы хотите удалить что-то в localStorage, который даже не существует

Что вам нужно сделать, так это удалить элемент из массива javascript ваших tasks а затем снова сохранить измененный массив в localStorage.

Предполагая task_id - это индекс в массиве:

//remove from array
tasks.splice(task_id,1);
//store again
localStorage.setItem('tasks',JSON.stringify(tasks));

ответил(а) 2015-07-21T18:12:00+03:00 5 лет, 7 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема