待办事项下拉列表不起作用的javascript

Purva shukla

我想创建一个将已完成和未完成的任务分开的下拉列表,但是出现错误:

TypeError:无法读取null的属性“ childNodes”

我不确定下拉菜单即filterTodo代码的逻辑是否正确。请提出有关如何使下拉菜单正常工作的建议。

我的代码的JsFiddle:

我的Javascript代码:

var input = document.querySelector('.todo_input');
var MainTodoContainer = document.getElementById('todos')
var addingButton = document.querySelector('.add-item');
var deleteAllBtn = document.querySelector('.deleteBtn');
var completedButton = document.querySelector('.completed');
var removeButton = document.querySelector('.trash');
const filterOption = document.querySelector(".filter-todo");
filterOption.addEventListener("click", filterTodo);
addingButton.addEventListener('click', function(e){
    /* stoping button behaviour */
    e.preventDefault();
    
    /* Create all the elements */
    if(input.value.trim()){
        /* UL Tag */
        var ulTag = document.createElement('ul');
        ulTag.classList.add('todo-list-container');
        /* Todo list div */
        var todoList = document.createElement('div');
        todoList.classList.add('todo-list');
        /* LI Tag */
        var liTag = document.createElement('li');
        liTag.innerText = input.value;
        liTag.classList.add('todo-item');
        /* Button Div */
        var buttonDiv = document.createElement('div');
        buttonDiv.classList.add('button');
        /* completed button element1 */
        var completeButton = document.createElement('button');
        completeButton.classList.add('completed');
        completeButton.innerHTML = '<i class="fas fa-check"></i>';
        /* Edit Button */
        var editBtn = document.createElement('button');
        editBtn.innerHTML = '<i class="far fa-edit"></i>';
        editBtn.classList.add('editBtn');
        editBtn.onclick = function(){
            editWorking(liTag);
        }
        /* trash button element2 */
        var trashButton = document.createElement('button');
        trashButton.classList.add('trash');
        trashButton.innerHTML = '<i class="fas fa-trash"></i>';
    
        /* Appending Elements into each other */
        ulTag.appendChild(todoList);
        todoList.appendChild(liTag);
        todoList.appendChild(buttonDiv);
        buttonDiv.appendChild(completeButton);
        buttonDiv.appendChild(editBtn);
        buttonDiv.appendChild(trashButton);
    
        /* if input is empty then don't display empty list in DOM */
        MainTodoContainer.appendChild(ulTag);

            /* sessionStorage */
        /* when the add button click clear the input value */
        input.value = '';
        /* complete and trash button working */
        todoList.addEventListener('click', function(e){
            var items = e.target;
            if(items.classList[0] === 'completed'){
                var todo = items.parentElement;
                var todo2 = todo.parentElement;
                todo2.classList.add('line_through')
            }
            else if(items.classList[0] === 'trash'){
                var todo = items.parentElement;
                var todo2 = todo.parentElement;
                todo2.classList.add('fall');
                todo2.addEventListener('transitionend', function(){
                    var todo3 = todo2.parentElement;
                    todo3.remove();
                });
            }
        });
    }else if(input.value === ''){
    
        document.getElementById("pi").style.display = "block";
          document.getElementById("pi").innerHTML = "plisss";

            setTimeout(function(){
                document.getElementById("pi").innerHTML = '';
                }, 3000);
    }
});


function editWorking(e){
    var editValue = prompt('edit the select item', e.firstChild.nodeValue);
    e.firstChild.nodeValue = editValue;
}
function deleteAllElements(){
    var gettingUlTag = document.querySelectorAll('.todo-list-container');
    for(var i = 0; i < gettingUlTag.length; i++){
        gettingUlTag[i].remove();
    }
    input.value = '';
}

function filterTodo(e) {
const todoList = document.querySelector(".todo-list");
  const todos = todoList.childNodes;
  var todo = input;
  todos.forEach(function(todo) {
    switch (e.target.value) {
      case "all":
        todo.style.display = "flex";
        break;
      case "completed":
        if (todo.classList.contains("completed")) {
          todo.style.display = "flex";
        } else {
          todo.style.display = "none";
        }
        break;
      case "uncompleted":
        if (!todo.classList.contains("completed")) {
          todo.style.display = "flex";
        } else {
          todo.style.display = "none";
        }
    }
  });
}
达莫达·黑格

之所以出现此错误,是因为您尝试使用来获取DOM上不存在的元素的子节点document.querySelector(".todo-list")

在使用前检查它是否存在可以解决您的问题。

const todos = todoList ? todoList.childNodes : [];

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

待办事项列表 JavaScript

来自分类Dev

简单的待办事项清单不起作用

来自分类Dev

简单的待办事项清单不起作用

来自分类Dev

使用 jQuery 附加到待办事项列表不起作用

来自分类Dev

过滤器任务不起作用-使用es6类的MVC模式的待办事项列表

来自分类Dev

使用Javascript创建待办事项列表

来自分类Dev

如何在javascript中创建待办事项列表

来自分类Dev

基本待办事项列表存储数据

来自分类Dev

AngularJs待办事项列表指令

来自分类Dev

待办事项列表和排序

来自分类Dev

尝试创建待办事项列表

来自分类Dev

ReactJs 待办事项列表推送状态

来自分类Dev

Reactjs 待办事项列表 setState

来自分类Dev

定位待办事项列表元素的问题

来自分类Dev

带有 localStorage 的待办事项列表

来自分类Dev

用JavaScript / HTML列出待办事项

来自分类Dev

用JavaScript / HTML列出待办事项

来自分类Dev

在JavaScript中建立待办事项清单

来自分类Dev

{%raw%}标签在Ionic的待办事项列表教程中起什么作用?

来自分类Dev

JavaScript下拉列表不起作用

来自分类Dev

使用Javascript将输入值附加到列表中。待办事项清单

来自分类Dev

JavaScript中的待办事项列表-删除任务后,您将无法正确选择其他任务

来自分类Dev

如何使用按钮删除通过JavaScript添加的“待办事项”列表项

来自分类Dev

JavaScript在待办事项列表项目中无法正常工作

来自分类Dev

JavaScript待办事项列表-删除按钮仅显示在添加的最新项目上

来自分类Dev

如何从 Laravel 的列表中删除待办事项列表项?

来自分类Dev

扩展TodoMVC以支持多个待办事项列表

来自分类Dev

Mongo模式:带有组的待办事项列表

来自分类Dev

使用git扫描源代码以生成待办事项列表等

Related 相关文章

热门标签

归档