开发者问题收集

Javascript:使用删除按钮删除受邀者

2021-05-25
54

大家好,我正在尝试创建一个受邀者列表,可以将人员添加到列表中,并且列表也可以通过删除按钮删除添加的受邀者。

const input = form.querySelector('input');
const ul = document.getElementById('invitedList');

function createLI(text) {
  const li = document.createElement('li');
  li.textContent = text;
  const label = document.createElement('label');
  label.textContent = 'Confirmed';
  li.appendChild(label);  
  const button = document.createElement('button');
  button.textContent = 'remove';
  button.classList.add('remove');
  li.appendChild(button);
  return li;
}

form.addEventListener('submit', (e) => {
  e.preventDefault();
  const text = input.value;
  input.value = '';
  const li = createLI(text);
  ul.appendChild(li);
  
const remove = document.querySelectorAll(".remove") //the problem lies here
remove.forEach(i => {
  i.addEventListener('click', (e) => {
  const li = e.target.parentNode;
  const ul = li.parentNode;
  ul.removeChild(li)  
  
   })
  });

})

它按预期工作(可以删除受邀者),但每次我尝试删除时控制台都会出现错误,如下所示:

未捕获的 TypeError:无法读取 HTMLButtonElement 中 null 的属性“removeChild”。

我该如何解决这个错误?错误来自我评论的 forEach 循环。

这是 codepen: https://codepen.io/ShawnTan15/pen/abJwOvO

2个回答

请按如下方式更改您的代码:

...
const remove = document.querySelectorAll(".remove") //the problem lies here
if (remove.length != 0) { // add this loop

  remove.forEach(i => {
    i.addEventListener('click', (e) => {
    const li = e.target.parentNode;
    const ul = li.parentNode;
    if(ul != null) ul.removeChild(li)  // add if statement
  
      })
    });

  })
}
pullidea-dev
2021-05-25

更新了 JS 代码

const form = document.getElementById('registrar');
const input = form.querySelector('input');
const ul = document.getElementById('invitedList');

function createLI(text) {
  const li = document.createElement('li');
  li.textContent = text;
  const label = document.createElement('label');
  label.textContent = 'Confirmed';
  li.appendChild(label);  
  const button = document.createElement('button');
  button.textContent = 'remove';
  button.classList.add('remove');
  button.addEventListener('click', (e) => {
  const li = e.target.parentNode;
  const ul = li.parentNode;
  ul.removeChild(li)
  
   });
  li.appendChild(button);
  return li;
}

form.addEventListener('submit', (e) => {
  e.preventDefault();
  const text = input.value;
  input.value = '';
  const li = createLI(text);
  ul.appendChild(li);

})
Vivek Bani
2021-05-25