window.addEventListener只在second click上获得executed,令人惊讶的是,在我单击一次li element读取任务并再次单击删除按钮后,读取任务事件被激发!因为我要把delete button号公路标在list element号公路上.

List元素的单击处理程序的值为read the task information.

删除按钮有remove task handler个.我正在将事件附加到stop event propagation和它的父级.

一百零二

这里的first problem是,因为我使用的是addEventListener,它只在第二次单击后执行.

如果我移除了事件Listeners的附加,那么单击删除按钮,则读取任务事件也会被激发!

如何解决这些问题??期待一些真正的解决方案.如果能帮上忙,我将不胜感激.谢谢!

这里是=>Working Demo

以下是我的代码:

window.deleteTask = function deleteTask(id) {
 const deleteButton = document.getElementById(id);
  deleteButton.addEventListener(
    "click",
    (event) => {
      // event.preventDefault();
      let taskAppObj = new ToDoConstructor();
      taskAppObj.removetask(id);
      event.stopPropagation();
    },
    false
  );
};

window.getTaskInfo = function getTaskInfo(id) {
  const li = document.getElementById(`data-${id}`);
  li.addEventListener("click", (event) => {
    let taskAppObj = new ToDoConstructor();
    let task = window.storeContext.find((task) => task.id === id);
    taskAppObj.readTheTask(task);
  });
};

推荐答案

使用createElement代替字符串文字,并且您不会在任何Event listener function上传递初始参数,它始终是一个事件参数,这是一个很好的做法.

function getTaskList() {
  let tasks = [...window.storeContext];
  console.log("tasl", tasks);
  const taskListUl = document.getElementById("task-elements");
  taskListUl.innerHTML =
    tasks && tasks.length > 0
      ? tasks
          .map(
            (task) =>
              `<li  id=data-${task.id} onclick="getTaskInfo(event)" key=${task.id}>
                ${task.title}
                <button id=${task.id} onclick="deleteTask(event)">X</button>
              </li>`
          )
          .join("<br/>")
      : null;
}

阅读任务

window.getTaskInfo = function getTaskInfo(event) {
  const id = event.currentTarget.id.split('-')[1];
  let taskAppObj = new ToDoConstructor();
  let task = window.storeContext.find((task) => task.id === Number(id));
  taskAppObj.readTheTask(task);
};

删除任务

window.deleteTask = function deleteTask(event) {
  event.stopPropagation();
  const id = event.currentTarget.id;
  console.log("I am delte function!");
  let taskAppObj = new ToDoConstructor();
  taskAppObj.removetask(Number(id));
}

还在代码沙箱中进行了测试

Javascript相关问答推荐

React状态变量在使用++前置更新时引发错误

如何在alpinejs中显示dev中x-for的元素

如何让\w token 在此RegEx中表现得不贪婪?

在具有焦点和上下文的d3多线图表中,如何将上下文的刷新限制在特定日期?

如何在不分配整个数组的情况下修改包含数组的行为主体?

如何访问Json返回的ASP.NET Core 6中的导航图像属性

如何才能拥有在jQuery终端中执行命令的链接?

硬币兑换运行超时

如何在RTK上设置轮询,每24小时

基于变量切换隐藏文本

浮动Div的淡出模糊效果

html + java script!需要帮助来了解为什么我得到(无效的用户名或密码)

实现JS代码更改CSS元素

单个HTML中的多个HTML文件

覆盖TypeScrip中的Lit-Element子类的属性类型

在forEach循环中获取目标而不是父对象的属性

react -原生向量-图标笔划宽度

使用线性插值法旋转直线以查看鼠标会导致 skip

用于测试其方法和构造函数的导出/导入类

如何调整下拉内容,使其不与其他元素重叠?