Javascript “不理解错误”;未捕获的TypeError:“;
我试图在我的对象中打印出一个值off true,但由于某些原因,我一直收到这个错误消息Javascript “不理解错误”;未捕获的TypeError:“;,javascript,arrays,object,Javascript,Arrays,Object,我试图在我的对象中打印出一个值off true,但由于某些原因,我一直收到这个错误消息 Uncaught TypeError:无法设置未定义的属性“toDoIsRemoved” 在removeTask(main.js:85) 在HTMLButtoneElement。(main.js:56) 它说第56行有问题: deleteButton.addEventListener('click', ()=>{removeTask(allTheToDos[i])}); 以下是整个功能: funct
Uncaught TypeError:无法设置未定义的属性“toDoIsRemoved”
在removeTask(main.js:85)
在HTMLButtoneElement。(main.js:56)
它说第56行有问题:
deleteButton.addEventListener('click', ()=>{removeTask(allTheToDos[i])});
以下是整个功能:
function generateHtml (){
// Creating an Ul for my items
let section = document.getElementById('mySection');
let myUl = document.createElement('ul');
myUl.className = 'listContainer';
section.appendChild(myUl);
// Creating the loop for my premade todo objects
for(i=0; i<allTheToDos.length; i++){
// Create a div wrapper for my li
let myListWrapperItemContainer = document.createElement('div');
myListWrapperItemContainer.className = 'listItemsWrapper';
// Creating Checked button
let checkedIcon = document.createElement('label');
checkedIcon.className = 'checkedIcon listItemsIcon';
checkedIcon.innerHTML = '<i class="fas fa-check"></i>';
//Creating li
let myLi = document.createElement('li');
myLi.classList = 'listItem lineTrough';
myLi.id= 'listItem';
// Creating delete button
let deleteButton = document.createElement('button');
deleteButton.id ='deleteButton';
deleteButton.className = 'trashCan listItemsIcon';
deleteButton.innerHTML = '<i class="fas fa-trash-alt"></i>';
// OnClick
deleteButton.addEventListener('click', ()=>{removeTask(allTheToDos[i])});
// Adding everything to my html
myListWrapperItemContainer.appendChild(checkedIcon);
myListWrapperItemContainer.appendChild(myLi);
myListWrapperItemContainer.appendChild(deleteButton);
myLi.innerHTML = allTheToDos[i].toDoItem;
myUl.appendChild(myListWrapperItemContainer);
}
}
我希望能够单击TODO上的任何按钮,并能够将值从false更改为true。问题在于您没有使用
let
定义i
。这意味着您正在使用全局变量i
<代码>i将在迭代后所有的todos.length
。然后,当您稍后单击事件处理程序时,它将使用此索引,其值为undefined
简而言之,问题是:
常量字母=[“a”、“b”、“c”];
//全球i
对于(i=0;i{
//下面的行不是在循环中调用的,而是在
//单击按钮。循环结束后会发生这种情况
//完成,这是我不再匹配的时候
//i }
需要解决的一件事是,页面上的所有“id”属性都必须是唯一的。您的代码对您添加的所有按钮使用相同的“id”。这是否回答了您的问题?请在您的问题中发布完整的错误消息,而不是在非现场图像中。“第56行有问题”不是一条我们可以帮助的错误信息。它们应该是相同的,这样我可以在需要时访问它们。长话短说:当你点击按钮时,你的循环已经完成,i
将比所有todos
的最后一个索引高出一个。(由于该索引不存在,它将返回未定义的
)感谢您的帮助,不幸的是,它没有解决问题issue@MarvStarv在单击回调中调用removeTask(allTheToDos[i])
之前,是否可以console.log(i,allTheToDos)
?它是否输出您期望的内容?
function removeTask (done){
done.toDoIsRemoved = true;
console.log(allTheToDos);
}