微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法让我的代码使用“addEventListner”将元素从一个无序列表移回另一个无序列表

如何解决无法让我的代码使用“addEventListner”将元素从一个无序列表移回另一个无序列表

我已经创建了一个待办事项列表。用户可以写下他们想要在当天完成的任务列表。任务完成后,他们可以勾选复选框,“触发”一个线槽。然后任务从id为“uList”的无序列表移动到id为“taskCompleted”的无序列表。但是,我希望用户只需双击即可将位于后者的项目移回前者。任务必须以其原始“状态”呈现。即没有线通过和未选中的复选框。我已经使用了事件对象,现在我正在使用 for 循环,以便这样做。然而,这两次尝试都失败了。我期待着收到您的来信。

void *const
var elUlList = document.getElementById("uList");
var btn = document.getElementById("btn");
const elInput = document.getElementById("input");
const footer = document.querySelector("footer");
const message = document.getElementById("message");
const elCounter = document.getElementById("counter");
const taskCompleted = document.getElementById("taskCompleted");
var elements = document.getElementsByTagName("li");
var input = document.getElementsByTagName("input")

function createListItems() {
  var inputValue = elInput.value;
  if(inputValue === "" || inputValue === null) return

  var newLi = document.createElement("li");
  newLi.id = Date.Now().toString();
  var input = document.createElement("input");
  input.type = "checkBox";
  input.name = "to-do-input";
  var newText = document.createTextNode(inputValue);
  newLi.appendChild(input);
  newLi.appendChild(newText);
  elUlList.appendChild(newLi);
  elCounter.innerHTML =+ elements.length;

  var todoInput = document.getElementsByTagName("to-do-input");

  for(var i = 0; i < todoInput.length; i++) {
    todoInput[i].addEventListener("change",function(e) {
      if(e.target.checked == true) {
        e.target.parentNode.remove();
      }
    })
  }
  }

btn.addEventListener("click",createListItems,false);

elInput.addEventListener("keyup",function(e) {
  if(e.keyCode === 13) {
    e.preventDefault();
    btn.click()
  }
})

elInput.addEventListener("mouSEOver",emptyField,false)

function emptyField() {
  this.value = "";
}

elUlList.addEventListener("change",function(e){
  var target = e.target;
  var parent = target.parentNode;
  alert("are you sure you want to move this item to completed task");
  parent.classList.add("taskMoved");
  taskCompleted.appendChild(parent);
  elCounter.innerHTML =+ elements.length;
});


elUlList.addEventListener("click",strikeOutElement,false);


function strikeOutElement(e) {
  var target = e.target;
  if(target.matches("input[type=checkBox]")){
  target.closest("li").classList.toggle("lineThrough",target.checked);
  }
}

var taskMoved = document.getElementsByClassName("taskMoved");

if(taskMoved.length > 0) {
  for(var i = 0; i < taskMoved.length; i++) {
    taskMoved[i].addEventListener("dblclick",function() {
    taskMoved[i].classList.remove("lineThrough");
    taskMoved[i].firstElementChild.toggle("lineThrough",target.checked);
    taskMoved[i].firstElementChild.checked = false;
    elUlList.appendChild(taskMoved[i]);
  },false);
  }
}
var date = new Date().toLocaleDateString("en-US")

footer.innerHTML = date
console.log(date)
.greenColor {
  color: green;
}

.redColor {
  color: red;
}

.lineThrough {
  text-decoration: line-through;
}

li {
  list-style-type: none;
}

解决方法

您对全局变量进行了大量循环并一直添加事件侦听器。我试图稍微清理一下,使用一个函数创建一个只有 2 个继续工作的侦听器的任务。

const tasksTodo = document.getElementById("uList");
var btn = document.getElementById("btn");
const elInput = document.getElementById("input");
const footer = document.querySelector("footer");
const message = document.getElementById("message");
const elCounter = document.getElementById("counter");
const tasksCompleted = document.getElementById("taskCompleted");
var elements = document.getElementsByTagName("li");
var input = document.getElementsByTagName("input");

function createTask(input) {
  let title = input.value;
  if ( !title ) return false;
  let task = document.createElement("li");
  let checkbox = document.createElement("input");
  checkbox.type = "checkbox";
  task.appendChild(checkbox);
  task.appendChild(document.createTextNode(title));

  //Checkbox is source of truth,listen to it changing
  checkbox.addEventListener("change",e => {
      if (checkbox.checked)
        completeTask(task);
      else
        undoTask(task);
  });
  tasksTodo.appendChild(task);
  //Then let dblclick just toggle the box
  task.addEventListener("dblclick",e =>{checkbox.click()});
  //reset the input,we're done
  input.value = '';
}

function completeTask(task) {
  task.classList.add("lineThrough");
  tasksCompleted.appendChild(task);
}

function undoTask(task) {
  task.classList.remove("lineThrough");
  tasksTodo.appendChild(task);
}

btn.addEventListener("click",e=>{createTask(elInput)},false);
elInput.addEventListener("keyup",function(e) {
  if (e.keyCode === 13) {
    e.preventDefault();
    btn.click();
  }
});

var date = new Date().toLocaleDateString("en-US");

footer.innerHTML = date
console.log(date)
.greenColor {
  color: green;
}

.redColor {
  color: red;
}

.lineThrough {
  text-decoration: line-through;
}

li {
  list-style-type: none;
}
<!DOCTYPE html>
<html lang="en" dir="ltr">

<head>
  <meta charset="utf-8">
  <title>Practise App</title>
  <link rel="stylesheet" href="index.css">
</head>

<body>

  <div id="message" class=""></div>
  <ul id="uList"></ul>
  <button id="btn" type="button" name="button">click here to add items</button><br>
  <input id="input" type="text" name="" value="">
  <div id="counter" class=""></div>
  <p>task Completed</p>
  <ul id="taskCompleted"></ul>

  <footer></footer>


  <script src="index.js" type="text/javascript"></script>
</body>

</html>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?