jQuery сделать список сделано кнопка не удаляет элемент - PullRequest
0 голосов
/ 13 октября 2019

Я создаю простой список дел, используя jQuery и локальное хранилище. Я также пытаюсь добавить кнопку для каждого добавляемого элемента, чтобы удалить элемент из списка. Мой список не обновляется при обновлении, и я не могу понять, как загрузить кнопку. Должна ли кнопка быть на стороне HTML?

Добавление к списку функций прекрасно работает, это просто хранение в локальном хранилище, в котором я, кажется, что-то упускаю.

Я создал jsfiddle для этого кода, и локальное хранилище, кажется, работает нормальноно это не будет работать на моем xampp. Также я могу отобразить готовую кнопку, но она не удалит элемент.

https://jsfiddle.net/blen6035/287pc153/7/

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
    <title>Task List</title>
	<link rel="stylesheet" href="main.css">
   	<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
   	<script src="tasks.js"></script>   	
</head>

<body>
	<aside>
		<h2>Add a task</h2>
		<label for="task">Task:</label>
		<input type="text" id="task" name="task"><br>
		<label>&nbsp;</label>
		<input type="button" id="add" name="add" value="Add Task"> 
	</aside>
	<main>
		<h1>Task list</h1>
		<ul id="listOfTasks"></ul>
	</main>
	<footer></footer>
</body>
</html>
"use strict"

$(document).ready(function() {

    let listOfTasks = JSON.parse( localStorage.getItem("tasks"));
    if( listOfTasks == undefined ){
        listOfTasks = [];
    }
    for( let i = 0; i < listOfTasks.length; i++){
        let li = $('<li> <a href="#" id="done">Done</a> 
        </li>').text(listOfTasks[i]);
        $('#listOfTasks').append(li);       
    }

    $('#add').click(function(){
        let task = $('#task').val();

        listOfTasks.push(task);
        localStorage.setItem("tasks", JSON.stringify(listOfTasks) 
  );

    let li = $('<li></li>').text(task);
    $('#listOfTasks').append('<li>'+ task +'<input type="submit" 
   class="done" value= "Done">' + '</li>');
    $('#task').val(' ').focus();
    });

$('.done').on('click', '.delete',function(){
$(this).parent().remove();
 });
/*$('#done').click(function(){
    localStorage.removeItem;
    $('#listOfTasks').html('');
});*/

}); // end ready

1 Ответ

0 голосов
/ 13 октября 2019

Это то, что вы пытаетесь сделать?

Обратите внимание, что мне пришлось заполнить локальное хранилище, чтобы сделать эту работу во фрагменте, заменить fakeLocalStorage на localStorage

const listOfTasksElement = $('#listOfTasks')
const taskInputElement = $('#task')
const listOfTasks = JSON.parse(fakeLocalStorage.getItem('tasks')) || []

const updateTasks = () => fakeLocalStorage.setItem('tasks', JSON.stringify(listOfTasks))

const addTask = task => {
  const taskElement = $('<li></li>').text(task)
  const doneElement = $('<span>Done</span>').click(() => {
    const index = listOfTasksElement.find('li').index(taskElement)
    taskElement.remove()
    listOfTasks.splice(index, 1)
    updateTasks()
  })
  
  taskElement.append(doneElement)
  listOfTasksElement.append(taskElement)
  listOfTasks.push(task)
  updateTasks()
}

listOfTasks.forEach(addTask)

$('#add').click(() => {
  addTask(taskInputElement.val())
  taskInputElement.val('').focus()
})
<ul id="listOfTasks"></ul>
<input id="task"><button id="add">Add</button>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
  // local storage doesn't work in stack overflow snippets,
  // this is just a poor in-memory implementation
  const fakeLocalStorage = {
      _data: {},
      setItem(k, v) { return this._data[k] = v },
      getItem(k) { return this._data.hasOwnProperty(k) ? this._data[k] : null }
  }
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...