Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
161 views
in Technique[技术] by (71.8m points)

javascript - Why I get duplicated todos in todo list?

This is the js code

let form = document.getElementById('todoForm');
let input = document.getElementById('todoInput');
let btn = document.getElementById('btn');
let todos = [];


const loadTodos = () => {
  let parent = document.getElementById('todoList');
  todos.forEach(todo => {
    let newLi = document.createElement('li');
    newLi.innerHTML = `<li>${todo.text}</li>`
    parent.appendChild(newLi);
  })
}

btn.addEventListener('click', (e) => {
  e.preventDefault();
  let text = input.value;
  let todo = {
    id: todos.length + 1,
    text: text,
    complete: false,
  }
  todos.push(todo);
  loadTodos();
})


window.onload = () => {
  loadTodos();
}

When I add a todo for the first time its ok, but the seconed time will print the first todo again include the seconed.

example:

  1. first todo 2.first todo 3.seconed todo
question from:https://stackoverflow.com/questions/65889128/why-i-get-duplicated-todos-in-todo-list

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

You should make another function to handle single todo added, below is your updated code

let form = document.getElementById('todoForm');
let input = document.getElementById('todoInput');
let btn = document.getElementById('btn');
let todos = [];


const loadTodos = () => {
    let parent = document.getElementById('todoList');
    todos.forEach(todo => {
        let newLi = document.createElement('li');
        newLi.innerHTML = `<li>${todo.text}</li>`
        parent.appendChild(newLi);
    })
}

const renderNewToDo = (todo) => {
    let parent = document.getElementById('todoList');
    let newLi = document.createElement('li');
    newLi.innerHTML = `<li>${todo.text}</li>`
    parent.appendChild(newLi);
}

btn.addEventListener('click', (e) => {
    e.preventDefault();
    let text = input.value;
    let todo = {
        id: todos.length + 1,
        text: text,
        complete: false,
    }
    todos.push(todo);
    renderNewToDo(todo);
})


window.onload = () => {
    loadTodos();
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...