gpt4 book ai didi

javascript - 在待办事项列表中添加删除按钮的最佳方法

转载 作者:行者123 更新时间:2023-12-03 04:04:04 25 4
gpt4 key购买 nike

我正在使用 vanilla JS 创建一个待办事项列表。理想情况下,我希望将添加、删除功能分开,以保持一切整洁。

我的问题是,如果我在添加待办事项时创建删除按钮,我不知道如何引用删除按钮。

JSFiddle:https://jsfiddle.net/ped1j6kf/11/

有什么想法吗?

谢谢

HTML

<body>
<!-- Main -->
<div id="main"></div>
<!-- Add -->
<input id="to-do-value" type="text" placeholder="Enter to do">
<button id="add">Add</button>
<script type="text/javascript" src="main.js"></script>
</body>

JS

// To do

var toDo = {
cacheDom: function() {
this.toDo = ['test'];
this.main = document.getElementById('main');
this.add = document.getElementById('add');
this.toDoValue = document.getElementById('to-do-value');
},
init: function() {
this.cacheDom();
this.bindEvents();
this.displayToDos();
},
bindEvents() {
this.add.addEventListener("click", this.addToDo.bind(this));
},
displayToDos: function() {
var html = '<ul>';
for(i=0; i < this.toDo.length; i++) {
html += '<li>' + this.toDo[i] + '</li>' + '<button>delete</button>';
}
html += '</ul>';

this.main.innerHTML = html;
},
addToDo(){
var toDoValue = this.toDoValue.value;
this.toDo.push(toDoValue);
this.displayToDos();
},
deleteToDo() {
console.log("make this delete button work");
}
}

toDo.init();

最佳答案

通过一些细微的更改,您可以使其按照现在的方式工作。

其中一个更改是理论上您可以有多个名称相同的待办事项(出于某种原因),将待办事项存储为对象可能更容易,并使用标识符将其保存在待办事项列表中,像这样:

addToDo( text ){
this.toDo.push({ id: this._id++, text: text});
this.displayToDos();
}

这确实需要一些其他小的更改,但它提供了直接引用 onClick 事件的可能性,如下所示:

displayToDos: function() {
var html = '<ul>';
for(i=0; i < this.toDo.length; i++) {
html += '<li>' + this.toDo[i].text + '</li>' + '<button onClick="toDo.deleteToDo(' + this.toDo[i].id + ')">delete</button>';
}
html += '</ul>';

this.main.innerHTML = html;
}

您现在拥有在待办事项列表中显示的文本作为 ID,当您想要删除该数据时可以引用该 ID

然后删除函数的工作原理如下

deleteToDo( id ) {
for (var i = 0; i < this.toDo.length; i++) {
if (this.toDo[i].id === id) {
// removes 1 item from the array at position i
this.toDo.splice(i, 1);
break;
}
}
this.displayToDos();
}

var toDo = {
_id: 0,
cacheDom: function() {
this.toDo = [];
this.main = document.getElementById('main');
this.add = document.getElementById('add');
this.toDoValue = document.getElementById('to-do-value');
},
init: function() {
// must run first
this.cacheDom();
this.bindEvents();
// now it can also allow for adding
this.addToDo('test');
this.displayToDos();
},
bindEvents() {
this.add.addEventListener("click", () => this.addToDo(this.toDoValue.value));
},
displayToDos: function() {
var html = '<ul>';
for(i=0; i < this.toDo.length; i++) {
html += '<li>' + this.toDo[i].text + '</li>' + '<button onClick="toDo.deleteToDo(' + this.toDo[i].id + ')">delete</button>';
}
html += '</ul>';

this.main.innerHTML = html;
},
addToDo( text ){
var toDoValue = text;
this.toDo.push({ id: this._id++, text: toDoValue});
this.displayToDos();
},
deleteToDo( id ) {
for (var i = 0; i < this.toDo.length; i++) {
if (this.toDo[i].id === id) {
this.toDo.splice(i, 1);
break;
}
}
this.displayToDos();
}
}

toDo.init();
<body>
<!-- Main -->
<div id="main"></div>
<!-- Add -->
<input id="to-do-value" type="text" placeholder="Enter to do">
<button id="add">Add</button>
<script type="text/javascript" src="main.js"></script>
</body>

关于javascript - 在待办事项列表中添加删除按钮的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44635406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com