0

I have problem with addEventListener in my code. These are Todo Tasks but when I use addEventListener to remove them by clicking button it doesn't work, but when I declare only function inside addTask function it works, so I delete the tasks with button.

var Task, TodoList, deleteButton, editButton, completeButton;

function addTask() {
  var inputValue = document.getElementsByTagName("input")[0];
  TodoList = document.getElementsByClassName("todo-list")[0];
  Task = document.createElement("li");
  var txt = document.createTextNode(inputValue.value);
  if (inputValue.value == "" || isNaN(inputValue.value) !== true) {
    alert("Input is not unacceptable");
  } else {
    Task.classList.add("li-item");
    Task.appendChild(txt);
    TodoList.appendChild(Task);
  }
  inputValue.value = " ";
    createButton();
    deleteButton.addEventListener("click", deleteTask);
}

function createButton() {
    deleteButton = document.createElement("button");
    editButton = document.createElement("button");
    completeButton = document.createElement("button");
    deleteButton.appendChild(document.createTextNode("Delete"));
    deleteButton.classList.add("delete-btn");
    Task.appendChild(deleteButton);
    editButton.appendChild(document.createTextNode("Edit"));
    Task.setAttribute("contentEditable", "false");
    editButton.classList.add("edit-btn");
    Task.appendChild(editButton);
    completeButton.appendChild(document.createTextNode("Complete"));
    completeButton.classList.add("complete-btn");
    Task.appendChild(completeButton);
}

function deleteTask() {
    TodoList.removeChild(Task);
}

Also this code removes just the last child.

3
  • It looks like Task is a global variable and thus exists only once. A variable can only have one value. When deleteTask is called (from whichever element) it will remove the node that is referenced by Task at that moment. Commented Apr 27, 2021 at 20:18
  • Also this code removes just the last child. You are updating Task every time addTask() runs, but your deleteTask always deletes Task, which, at the time of execution, always holds a reference to the last created list item. Commented Apr 27, 2021 at 20:19
  • yes i got it but how can i fix it i don't know about it Commented Apr 27, 2021 at 20:25

1 Answer 1

1

You need to run yow code once the dom mounted

window.addEventListener('DOMContentLoaded', (event) => {
    var Task, TodoList, deleteButton, editButton, completeButton;

function addTask() {
  var inputValue = document.getElementsByTagName("input")[0];
  TodoList = document.getElementsByClassName("todo-list")[0];
  Task = document.createElement("li");
  var txt = document.createTextNode(inputValue.value);
  if (inputValue.value == "" || isNaN(inputValue.value) !== true) {
    alert("Input is not unacceptable");
  } else {
    Task.classList.add("li-item");
    Task.appendChild(txt);
    TodoList.appendChild(Task);
  }
  inputValue.value = " ";
    createButton();
    deleteButton.addEventListener("click", deleteTask);
}

function createButton() {
    deleteButton = document.createElement("button");
    editButton = document.createElement("button");
    completeButton = document.createElement("button");
    deleteButton.appendChild(document.createTextNode("Delete"));
    deleteButton.classList.add("delete-btn");
    Task.appendChild(deleteButton);
    editButton.appendChild(document.createTextNode("Edit"));
    Task.setAttribute("contentEditable", "false");
    editButton.classList.add("edit-btn");
    Task.appendChild(editButton);
    completeButton.appendChild(document.createTextNode("Complete"));
    completeButton.classList.add("complete-btn");
    Task.appendChild(completeButton);
}

function deleteTask() {
    TodoList.removeChild(Task);
}

})

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.