【发布时间】:2022-01-12 21:30:21
【问题描述】:
我正在制作一个简单的待办事项清单。您从输入提交项目,然后他们转到待办事项部分。当您单击它们时,它们会转到“完成”部分。当您再次单击它们时,它们将永远消失。一切正常。
但我意识到 doneItens 数组的长度一直在增长,我想对其进行优化。所以我想出了这行代码
doneItens.splice(i, 1);
它位于 onclick 事件中,您可以在 deleteDone 函数内的代码中看到它。
但是,这给出了错误,
Error:{ "message": "Uncaught TypeError: doneItens.splice is not a function"
如果我把它放在 onclick 事件的外面和下面,它也不起作用。我该怎么做?
var input = document.getElementById('play');
var toDo = document.getElementsByTagName('ol')[0];
var done = document.getElementById('done');
function handleSubmit(event) {
event.preventDefault();
const newItem = document.createElement('li');
newItem.setAttribute('class', 'item');
newItem.append(input.value);
toDo.append(newItem);
input.value='';
deleteItem();
}
function deleteItem() {
const toBeDone = document.getElementsByClassName('item');
for(let i = 0; i < toBeDone.length; i++) {
toBeDone[i].onclick = () => {
appendItemDone(toBeDone[i]);
toBeDone[i].style.display = 'none';
deleteDone();
}
}
}
function appendItemDone(item) {
const newDone = document.createElement('li');
newDone.setAttribute('class', 'feito')
newDone.append(item.innerText);
done.append(newDone);
}
function deleteDone() {
const doneItens = document.getElementsByClassName('feito');
console.log('done length', doneItens.length)
for (let i = 0; i < doneItens.length; i++) {
doneItens[i].onclick = () => {
doneItens[i].style.display = 'none';
doneItens.splice(i, 1);
}
}
}
<div id='flex'>
<form class='form' onsubmit='handleSubmit(event)'>
<input placeholder='New item' type='text' id='play'>
<button>Send</button>
</form>
<div id='left'>
<h1 id='todo' >To-do:</h1>
<p class='instruction'><i>(Click over to mark as done)</i></p>
<ol id='here'></ol>
</div>
<div id='right'>
<h1>Done:</h1>
<p class='instruction'><i>(Click over to delete it)</i></p>
<p id='placeholder'></p>
<ol id='done'></ol>
</div>
</div>
【问题讨论】:
标签: javascript arrays dom onclick splice