Javascript 如何在另一个函数中传播函数?

Javascript 如何在另一个函数中传播函数?,javascript,local-storage,Javascript,Local Storage,即将完成此todoApp: 除了我有一个删除项目的函数(左侧边栏)之外,一切都很好 该函数只工作一次,基本上不会对每个项目删除按钮进行传播 如果我只添加一个项目,我可以删除它; 如果我添加2个项目,我只能删除1个,不管是哪一个; 如果我添加了两个以上的项目,我仍然可以只删除一个项目 我在创建项目的函数中调用函数: function populateProjects(){ let newDiv = document.createElement("div"); newDiv.cla

即将完成此todoApp:

除了我有一个删除项目的函数(左侧边栏)之外,一切都很好

该函数只工作一次,基本上不会对每个项目删除按钮进行传播

如果我只添加一个项目,我可以删除它; 如果我添加2个项目,我只能删除1个,不管是哪一个; 如果我添加了两个以上的项目,我仍然可以只删除一个项目

我在创建项目的函数中调用函数:

function populateProjects(){
    let newDiv = document.createElement("div");
    newDiv.classList = "eachproject";
    newDiv.dataset.name = projectStorage[projectStorage.length - 1].dataset;

    let newButton = document.createElement('button');
    newButton.classList = "list-button";
    newButton.dataset.name = projectStorage[projectStorage.length - 1].dataset;
    newButton.innerHTML = projectStorage[projectStorage.length -1].title
    newButton.style.background = projectStorage[projectStorage.length -1].priority;

    let newSpan = document.createElement('span');
    newSpan.innerHTML = projectStorage[projectStorage.length -1].date
    newSpan.style.float = "right"
    let deleteButton = document.createElement('button')
    deleteButton.classList = 'delete-button'
    deleteButton.innerHTML = '<i class="fas fa-trash"></i>'
    deleteButton.dataset.name = projectStorage[projectStorage.length - 1].dataset;


    document
    .querySelector(".projects")
    .appendChild(newDiv)
    .appendChild(newButton)
    document
    .querySelector(".projects")
    .appendChild(newDiv)
    .appendChild(newSpan)
    document
    .querySelector('.projects')
    .appendChild(newDiv)
    .appendChild(deleteButton)    


    deleteProject();
}
函数populateProjects(){
让newDiv=document.createElement(“div”);
newDiv.classList=“每个项目”;
newDiv.dataset.name=projectStorage[projectStorage.length-1].dataset;
让newButton=document.createElement('button');
newButton.classList=“列表按钮”;
newButton.dataset.name=projectStorage[projectStorage.length-1].dataset;
newButton.innerHTML=projectStorage[projectStorage.length-1]。标题
newButton.style.background=projectStorage[projectStorage.length-1]。优先级;
让newSpan=document.createElement('span');
newSpan.innerHTML=projectStorage[projectStorage.length-1]。日期
newSpan.style.float=“右”
让deleteButton=document.createElement('button'))
deleteButton.classList='deleteButton'
deleteButton.innerHTML=''
deleteButton.dataset.name=projectStorage[projectStorage.length-1]。数据集;
文件
.querySelector(“项目”)
.appendChild(newDiv)
.appendChild(纽布顿)
文件
.querySelector(“项目”)
.appendChild(newDiv)
.appendChild(newSpan)
文件
.querySelector(“.projects”)
.appendChild(newDiv)
.appendChild(删除按钮)
删除项目();
}

问题可能是您的
拼接()。第一个参数是数组中的整数索引(请参见:)。您可以获取数据集名称的索引,然后在拼接中使用该索引。例如

var itemIndex = projectStorage.indexOf(el.dataset.name);
projectStorage.splice(itemIndex, 1);
或者,您可以使用过滤器创建一个新数组,并删除数据集名称:

var newProjectStorage = projectStorage.filter(project => project.dataset !== el.dataset.name);

问题可能是您的
splice()
。第一个参数是数组中的整数索引(请参见:)。您可以获取数据集名称的索引,然后在拼接中使用该索引。例如

var itemIndex = projectStorage.indexOf(el.dataset.name);
projectStorage.splice(itemIndex, 1);
或者,您可以使用过滤器创建一个新数组,并删除数据集名称:

var newProjectStorage = projectStorage.filter(project => project.dataset !== el.dataset.name);

感谢您抽出时间回答。不幸的是,el.dataset.name已经是一个数字了。//在js文件的开头,我将let projectCounter设置为0,并将其设置为dataset,并随创建的每个项目递增。虽然它是来自HTML的字符串,但我会尝试将其设置为整数tbh。它与location.reload();,有关,基本上,我添加了一个新行el.nexist('div').remove();删除了重新加载,但是现在存储没有更新,但是UI更新了,如果我让这两行都打开,存储会更新,但是它不会工作超过一次,因为它需要时间来回答。不幸的是,el.dataset.name已经是一个数字了。//在js文件的开头,我将let projectCounter设置为0,并将其设置为dataset,并随创建的每个项目递增。虽然它是来自HTML的字符串,但我会尝试将其设置为整数tbh。它与location.reload();,有关,基本上,我添加了一个新行el.nexist('div').remove();并删除了重新加载,但现在存储不更新,但UI更新,如果我让这两行都打开,存储会更新,但不会工作多次