试图用 li 创建一个按钮,但它不起作用

时间:2021-05-23 01:59:04

标签: javascript html arrays button

我正在尝试使用类似于待办事项列表的数组制作杂货清单应用程序。我让它与一个添加按钮一起工作,并有一个删除按钮可以从列表中删除一个项目。但是现在我正在尝试使每个 li 创建一个删除按钮,以便可以有选择地删除每个杂货项目。我试了一下,但我不太确定我在这里做错了什么。

let addButton = document.getElementById('add-button');
addButton.addEventListener('click', add);

let addInput = document.getElementById('add-input');

//let removeButton = document.getElementById('remove-button');
//removeButton.addEventListener('click', remove);

let groceryList = [

]

function add() {
  groceryInput = addInput.value;
  groceryList.push(groceryInput);
  addInput.value = '';
  displayGroceries();
}

function remove(event) {
  let position = event.currentTarget.id;
  groceryList.splice(position, 1);
  displayGroceries();
}

function displayGroceries() {
  let groceryUl = document.getElementById('grocery-ul');
  groceryUl.innerHTML = '';

  for (let i = 0; i < groceryList.length; i++) {
    let groceryLi = document.createElement('li');
    groceryLi.innerHTML = groceryList[i];
    groceryUl.appendChild(groceryLi);

  }

  let removeButton = document.createElement('button');
  removeButton.innerText = "Remove";
  removeButton.addEventListener('click', remove);
  removeButton.id = i;
  groceryLi.appendChild(removeButton);

}
<div class="container">
  <h1>Grocery List</h1>
  <input id="add-input" placeholder="Add Groceries" autocomplete="off">
  <button id="add-button">Add</button>
  <!--<button id="remove-button">Remove</button>-->
  <div>
    <ul id="grocery-ul"></ul>
  </div>

1 个答案:

答案 0 :(得分:1)

它不能作为您在 for 循环外调用的杂货Li.appendChild(removeButton)。

您已经使用 let 定义了grooveLi,并且 let 有一个块作用域。

移动代码以在内部添加按钮解决了问题

找到displayGroceries的固定方法如下

function displayGroceries() {
  let groceryUl = document.getElementById('grocery-ul');
  groceryUl.innerHTML = "";
  for (let i = 0; i < groceryList.length; i++) {
    let groceryLi = document.createElement("li");
    groceryLi.innerHTML = groceryList[i];
    let removeButton = document.createElement("button");
    removeButton.innerText = "Remove";
    removeButton.addEventListener("click", remove);
    removeButton.id = i;
    groceryLi.appendChild(removeButton);
    groceryUl.appendChild(groceryLi);
  }
}