我正在创建待办事项列表,并且在添加新列表项时动态添加了li和button标签。该按钮是x,应该删除列表项。我已经尝试了几件事,但无法弄清楚如何为每个单独的x按钮创建一个eventListener并在单击时删除相应的列表项。

renderTodos函数是在其中创建所有动态添加的内容的地方。我为每个按钮设置了一个数据索引,试图在其中访问每个按钮以在每个动态按钮上附加一个eventListener,但是我不确定如何实现。根据我的阅读,应该有一种使用currentTarget或事件目标来执行此操作的方法,但我不知道它是如何工作的。

var input = document.querySelector('input[name=todoItem]'),

btnAdd = document.querySelector('button[name=add]'),
btnClear = document.querySelector('button[name=clear]'),
list = document.querySelector('.todo'),
storeList = [];

function renderTodos(){
  var el = document.createElement('li'),
  x = document.createElement('button');
  listLength = storeList.length;

  //Set text for remove button
  x.innerHTML = 'x';

  for(var i = 0; i < listLength; i++){
    el.innerHTML = storeList[i];
    list.appendChild(el);
    x.setAttribute('data-index', i);
    el.appendChild(x);
  }

  // check for correct data-index property on x button
}

function addTodos(){
  storeList.push(input.value);

  // Check that input is getting pushed to list array
  console.log(storeList);
  renderTodos();
}


function clearList(){
  // make list empty
  list.innerHTML = '';
  storeList.splice(0, storeList.length);
  //render empty list
  renderTodos();

  //Check that list array is empty
  console.log(storeList);
}

btnAdd.addEventListener('click', addTodos);
btnClear.addEventListener('click', clearList);


到目前为止,列表上的所有其他内容都有效,我只是不知道如何实现此eventListener。

最佳答案

您可以使用以下方法将侦听器添加到每个按钮:

 x.innerHTML = '';
 x.onclick = function(){
   var node = this.parentNode;
   node.parentNode.removeChild(node);
 };


或者,您可以按原样保留renderTodos代码,并将remove委托给父UL:

// Add the listener
list.addEventListener('click', removeItem);

// The listener function
function removeItem(event) {
  var node = event.target;

  // Check that the click came from an X button
  // better to check against a class name though
  if (node.tagName &&
      node.tagName.toLowerCase() == 'button' &&
      node.innerHTML == 'x') {
    node = node.parentNode;
    node.parentNode.removeChild(node);
  }
}

关于javascript - 将eventListener附加到javascript中的动态元素,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26667109/

10-11 11:44