Javascript “不理解错误”;未捕获的TypeError:“;

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

我试图在我的对象中打印出一个值off true,但由于某些原因,我一直收到这个错误消息

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);
}