Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在javascript中使用委托_Javascript_Delegates - Fatal编程技术网

如何在javascript中使用委托

如何在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

我尝试用javascript制作待办事项列表应用程序,我有这样的功能来创建新的每个项目(li元素)

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