【发布时间】:2014-10-31 03:27:49
【问题描述】:
我正在制作一个待办事项列表,并且在添加新列表项时动态添加了 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。
【问题讨论】:
-
renderTodos 只是在单击添加按钮时添加列表项和 x 按钮,这是它应该做的。我只需要弄清楚如何单击添加的 x 按钮以删除关联的列表项。
-
我不太明白你的意思。当我查看开发工具并将多个项目添加到列表中时,它会显示每次单击添加按钮时都会创建一个列表项和按钮。每次我单击清除按钮时,它都会删除所有 li 和按钮。你的意思是没有新的元素被创造出来?抱歉,如果我遗漏了一些我不太了解的简单内容。
-
我错过了
list.appendChild(el);。它所做的是每次循环遍历 storeList 的所有成员,您看到的唯一一个就是最后一个。您不需要 for 循环,也不需要“渲染空列表”。长度为零的数组上的 for 循环什么也不做。
标签: javascript dom-events event-listener event-delegation