Javascript 待办事项列表删除和完成按钮

Javascript ToDo List Delete and Complete Buttons

我的CodePen

因此,当我单击删除和完成按钮时,它会运行这些功能

function deleteListItem(){
   alert("Item was deleted");            
}


function completeListItem(){
   alert("This item was completed");
}

两个按钮。我想知道如何使用事件委托来分隔这些函数,这样每当我单击完成按钮时它就不会 运行 这两个函数。

var deleteButton = document.getElementById("Remove");
  deleteButton.addEventListener("click", deleteListItem);
var completeButton = document.getElementById("Complete");
  completeButton.addEventListener("click", completeListItem);

addEventListener 分配给特定的 id 按钮。 id todoul 所以点击 ul 里面的任何东西都会 运行 两个函数

在您的 javascript 中,当您声明 deleteButtoncompleteButton 时,它们都被分配了相同的元素,即 ul。该元素包含整个列表。那不是你想要的,你想要处理按钮上的点击。 deleteButton 应该分配给您的删除按钮元素,您的 completeButton 应该分配给您的完整按钮元素。为此,只需使用所需按钮的 ID 而不是 UL 的 ID。

在您的代码中,更改为:

var deleteButton = document.getElementById("todo");
deleteButton.addEventListener("click", deleteListItem);
var completeButton = document.getElementById("todo");
completeButton.addEventListener("click", completeListItem);

为此:

var deleteButton = document.getElementById("Remove");
deleteButton.addEventListener("click", deleteListItem);
var completeButton = document.getElementById("Complete");
completeButton.addEventListener("click", completeListItem);

编辑: 由于您的按钮不是唯一的,因此您不应使用 id 来添加事件侦听器。您应该使用 class 并通过循环将事件侦听器分配给具有 class 的所有元素。在您的 html 中为您的按钮添加一个 class 属性,如下所示:<button class="Remove"><i class="fa fa-trash" aria-hidden="true"></i></button>。然后这样处理事件:

var deleteButtons = document.getElementsByClassName("Remove");
for (var i = 0; i < deleteButtons.length; i++) {
    deleteButtons[i].addEventListener('click', deleteListItem, false);
}
var completeButton = document.getElementsByClassName("Complete");
for (var i = 0; i < completeButton.length; i++) {
        completeButton[i].addEventListener('click', completeListItem, false);
}