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