如何在javascript中使用委托
我尝试用javascript制作待办事项列表应用程序,我有这样的功能来创建新的每个项目(li元素)如何在javascript中使用委托,javascript,delegates,Javascript,Delegates,我尝试用javascript制作待办事项列表应用程序,我有这样的功能来创建新的每个项目(li元素) todoView: function (todo) { var controller = todoController.todoList; console.log('controller', controller); var item = document.createElement('li'); item.setAttribute('class', 'to
todoView: function (todo) {
var controller = todoController.todoList;
console.log('controller', controller);
var item = document.createElement('li');
item.setAttribute('class', 'todoItem');
var inpCheckbox = document.createElement('input');
this.setAttributes(inpCheckbox, { 'type': 'checkbox', 'class' : 'itemList'} );
var lbContent = document.createElement('label');
lbContent.innerHTML = todo.getContent();
var btnRemove = document.createElement('button');
console.log('id', this.id)
this.setAttributes(btnRemove, { 'class': 'remove', 'id' : this.id} );
// btnRemove.setAttribute('id', this.id);
//item append each element
item.appendChild(inpCheckbox);
item.appendChild(lbContent);
item.appendChild(btnRemove);
console.log('item', item);
//ul append each item
document.querySelector('#todoListView').appendChild(item);
},
但是在结束文件中,我为所有li项设置了句柄事件have class。remove
var deleteItem = document.getElementsByClassName('remove')
for(var i = 0; i < deleteItem.length; i++) {
deleteItem[i].addEventListener("click", function() {
todoController.removeTodo(i);
});
}
var deleteItem=document.getElementsByClassName('remove')
对于(变量i=0;i
但现在我有一个问题,我不能调用.remove
类,因为它只是创建到中以提供函数。它将包含差异块。在jquery中,我可以使用委托来解决它,但我不知道如何在js对中修复它。请帮助我,而不是
var deleteItem = document.getElementsByClassName('remove')
for(var i = 0; i < deleteItem.length; i++) {
deleteItem[i].addEventListener("click", function() {
todoController.removeTodo(i);
});
}
但是,我认为您的removeTodo
功能有缺陷您的解释太清楚了,但是对于代码演示,您显示的功能在我的实践中不起作用。你能帮我再查一下吗。让我们在查看代码,谢谢@JaromandaXsorry,但我仍然不清楚,在找到类为的元素之前,我将创建新按钮。删除,对吗?它类似于'var btnRemove=document.createElement('button')var deleteItem=document.getElementsByClassName('remove');调用(deleteItem,function(item,i){item.addEventListener(“单击”,function(){todoController.removeTodo(i);});})`
todoListView.addEventListener('click', function(e) {
if(e.target.classList.contains('remove')){
todoController.removeTodo(e.target);
}
});