Javascript 在我的待办事项列表中,删除/删除任务功能不起作用。你知道为什么吗?

Javascript 在我的待办事项列表中,删除/删除任务功能不起作用。你知道为什么吗?,javascript,json,Javascript,Json,这是一个使用vanilla JavaScript的基本待办事项列表应用程序。我已经能够让一切工作,但我无法点击删除图标,以便它删除一个元素。有人看到removeTask函数中有错误吗?或者,当我决定从本地存储中清除任务/删除时,可能出现了问题 //Define UI variables const form = document.getElementById('task-form'); const taskList = document.querySelector('.collection');

这是一个使用vanilla JavaScript的基本待办事项列表应用程序。我已经能够让一切工作,但我无法点击删除图标,以便它删除一个元素。有人看到removeTask函数中有错误吗?或者,当我决定从本地存储中清除任务/删除时,可能出现了问题

//Define UI variables
const form = document.getElementById('task-form');
const taskList = document.querySelector('.collection');
const clearBtn = document.querySelector('.clear-tasks');
const filter = document.getElementById('filter');
const taskInput = document.getElementById('task');

//load all event listeners
loadEventListeners();
//function
function loadEventListeners(){
  //DOM load event
  document.addEventListener('DOMContentLoaded', getTasks )
  //add task
  form.addEventListener('submit', addTask);
  //remove task evernt
  taskList.addEventListener('click', removeTask)
  //Clear task event
  clearBtn.addEventListener('click', clearTasks)
  //filter tasks event
  filter.addEventListener('keyup', filterTasks)

}
//Get task from local Storage
function getTasks(){
  let tasks;
  if(localStorage.getItem('tasks') === null){
    tasks = [];
  } else{
    tasks = JSON.parse(localStorage.getItem('tasks'));
  }

  tasks.forEach(function (task) {
    //create list element
  const li = document.createElement('li');
  //add class
  li.className = 'collection-item';
  //text node create and append to li
  li.appendChild(document.createTextNode(task));
  // add link element
  const link = document.createElement('a');
  //ad class
  link.className = 'delete-item secondary-content';
  //add icon html
  link.innerHTML = '<i class ="fa fa-remove"></li>';
  //append the link to li
  li.appendChild(link);
  //append to ul
  taskList.appendChild(li);
  });
}
//Add task
function addTask(e){
  if(taskInput.value === ''){
    alert('You Have Not Inputed Anything. Please Add A Task');
  }
  //create list element
  const li = document.createElement('li');
  //add class
  li.className = 'collection-item';
  //text node create and append to li
  li.appendChild(document.createTextNode(taskInput.value));
  // add link element
  const link = document.createElement('a');
  //ad class
  link.className = 'delete-item secondary-content';
  //add icon html
  link.innerHTML = '<i class ="fa fa-remove"></li>';
  //append the link to li
  li.appendChild(link);
  //append to ul
  taskList.appendChild(li);
  //local storage
  storeToLocalStorage(taskInput.value);
  //clear input
  taskInput.value = '';
  e.preventDefault();
}
//store to local
function storeToLocalStorage(task){
  let tasks;
  if(localStorage.getItem('tasks') === null ){
    tasks = [];
  }else{
    tasks = JSON.parse(localStorage.getItem('tasks'));
  }
  tasks.push(task);

  localStorage.setItem('tasks', JSON.stringify(tasks));
}
//remove task
function removeTask(e){
  if(e.target.parentElement.classList.contains('delete-item')){
    if(confirm('Are you sure?')){
    e.target.parentElement.parentElement.remove();
      //REMOVE FROM LS
      removeTask(e.target.parentElement.parentElement);
    }
  }
}

//remove from LS
function removeTask(taskItem){
  let tasks;
  if(localStorage.getItem('tasks') === null ){
    tasks = [];
  }else{
    tasks = JSON.parse(localStorage.getItem('tasks'));
  }
  tasks.forEach((task, index) => {
    if(taskItem.textContent === task){
      task.splice(index, 1);
    }
  })
  localStorage.setItem('tasks', JSON.stringify(tasks));
}
//clear tasks
function clearTasks(){
  //simpler method
  //taskList.innerHTML = '';

  //faster and better method
  while(taskList.firstChild){
    taskList.removeChild(taskList.firstChild);
  }
  //clear from LS
  clearTasksLs();
}
//clear tasks from LS
function clearTasksLs(){
  localStorage.clear();
}
//Filter tasks
function filterTasks(e){
  const text = e.target.value.toLowerCase();
  document.querySelectorAll('.collection-item').forEach(function (task){
    const item = task.firstChild.textContent;
    if(item.toLowerCase().indexOf(text) != -1){
      task.style.display = 'block';
    }else {
      task.style.display = 'none';
    }
  });
}

在没有看到html的情况下很难说清楚,但是有两个名为removeTask的方法,它们都接受1个参数。那么它如何知道使用哪种方法呢?您需要以某种方式将它们组合起来,或者将它们命名为不同的名称。

当您使用类选择器获取某个对象时,该对象将返回为数组,因为该类可以包含多个元素。例如,请尝试使用任务列表[0]或使用IDG。很高兴听到它!您介意将此标记为正确答案吗?第二个函数声明将覆盖第一个函数声明。这就是它知道使用哪一个的方式。你是对的,它覆盖了第一个。但这就是导致他犯错的原因。它只是在一个函数中将其从列表中删除,而忽略了实际将其从DOM中删除的函数。@EstherNdung'u您能将此答案标记为正确吗?我只是一个简单的人,喜欢看到我的分数上升,哈哈。