javascript - 如何在另一个函数中传播一个函数?
问题描述
几乎完成了这个 todoApp: https ://jsfiddle.net/cpbt9dm7/
除了我有一个删除项目的功能(左侧的侧边栏)之外,一切都很好
function deleteProject(){
let allRemoveButtons = document.querySelectorAll('.delete-button');
allRemoveButtons.forEach(function(el){
el.addEventListener('click', function(){
console.log(el.dataset.name);
projectStorage.splice(el.dataset.name, 1);
localStorage.setItem("items", JSON.stringify(projectStorage));
location.reload();
})
})
}
该功能只工作一次,它基本上不会为每个项目删除按钮传播。
如果我只添加一个项目,我可以删除它;如果我添加 2 个项目,我只能删除 1 个,不管是哪一个;如果我添加超过 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();
}
解决方案
问题可能出在您的splice()
. 第一个参数是数组的整数索引(参见:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice )。您可以获取数据集名称的索引,然后在拼接中使用它。例如
var itemIndex = projectStorage.indexOf(el.dataset.name);
projectStorage.splice(itemIndex, 1);
或者,您可以使用过滤器创建一个删除数据集名称的新数组:
var newProjectStorage = projectStorage.filter(project => project.dataset !== el.dataset.name);
推荐阅读
- php - Woocommerce 审查订单总挂钩两次回显结果
- sql - 将字符串转换为浮点数/小数 - 大查询
- .net-5 - dotnet publish,带有框架引用的核心项目,发布配置失败
- python - 获取函数的所有最小值
- selenium - Selenium Python Webdriver 混合内容错误 http https
- racket - 为什么这个延续申请会导致无限循环
- jenkins - 使用描述设置器插件设置构建描述不起作用
- python - Python,在字典中查找所有缺失的字段
- reactjs - Material UI 表格行拖放
- vhdl - 使用分层库路径的 VHDL-2008 实例化?