首页 > web前端 > css教程 > 正文

在 JavaScript 中移动 TodoList 中的“正在进行”任务如何解决?

聖光之護
发布: 2024-10-22 21:55:58
转载
1156人浏览过

在 javascript 中移动 todolist 中的“正在进行”任务如何解决?

javascript 中使用 dom 更新 todolist

在您的问题中,您遇到了在使用 javascript 通过 dom 更新 todolist 时遇到困难的问题。具体来说,您无法将“正在进行”的任务移动到“已完成”部分。

问题原因

在您提供的 javascript 代码中,拼写错误导致“正在进行”任务无法移动到“已完成”部分。您在事件侦听器和数据属性中拼写了“form”而不是“from”。

立即学习Java免费学习笔记(深入)”;

解决方案

千面视频动捕
千面视频动捕

千面视频动捕是一个AI视频动捕解决方案,专注于将视频中的人体关节二维信息转化为三维模型动作。

千面视频动捕 27
查看详情 千面视频动捕

将代码中的所有“form”拼写替换为“from”。修改后的代码如下:

contentdom.addeventlistener("change", (event) => {
  let target = event.target;
  if (target.dataset.from === "todo" && target.tagname === "input") {
    let index = +target.dataset.index;
    // 删除这一项
    let value = data.todoarr.splice(index, 1)[0];
    // 添加到已完成
    data.donearr.push(value);
    render(data);
  } else if (target.dataset.from === "done" && target.tagname === "input") {
    let index = +target.dataset.index;
    let value = data.donearr.splice(index, 1)[0];
    data.todoarr.push(value);
    render(data);
  }
});
登录后复制

更新后的代码示例

修改后的代码如下:

let data = {
  todoArr: [],
  doneArr: [],
};

function main() {
  let storage = localStorage.getItem("todo");
  if (storage !== null) {
    data = JSON.parse(storage);
    render(data);
  }

  // 获取按钮 DOM
  let addBtn = document.getElementById("add-btn");

  // 获取 input DOM
  let titleInput = document.getElementById("title");

  // 为按钮增加 click 事件监听
  addBtn.addEventListener("click", (event) => {
    if (titleInput.value) {
      data.todoArr.push(titleInput.value);
      render(data);
      titleInput.value = "";
    }
  });

  // 获取容器 DOM
  let contentDom = document.getElementById("content");

  // 通过事件代理的方式,监听 input 派发的 change 事件
  contentDom.addEventListener("change", (event) => {
    let target = event.target;
    if (target.dataset.from === "todo" && target.tagName === "INPUT") {
      let index = +target.dataset.index;
      // 删除这一项
      let value = data.todoArr.splice(index, 1)[0];
      // 添加到已完成
      data.doneArr.push(value);
      render(data);
    } else if (target.dataset.from === "done" && target.tagName === "INPUT") {
      let index = +target.dataset.index;
      let value = data.doneArr.splice(index, 1)[0];
      data.todoArr.push(value);
      render(data);
    }
  });

  // 通过事件代理的方式,监听 tag 派发的 click 事件
  contentDom.addEventListener("click", (event) => {
    let target = event.target;
    if (target.dataset.from === "todo" && target.tagName === "IMG") {
      let index = +target.dataset.index;
      data.todoArr.splice(index, 1);
      render(data);
    } else if (target.dataset.from === "done" && target.tagName === "IMG") {
      let index = +target.dataset.index;
      data.doneArr.splice(index, 1);
      render(data);
    }
  });
}

let imgSrc =
  "https://ts1.cn.mm.bing.net/th/id/R-C.f1d02b4e59751fba384245ebf3c42688?rik=xMnkkxisjTQERA&riu=http%3a%2f%2fcdn.onlinewebfonts.com%2fsvg%2fimg_513596.png&ehk=gUYMqjE9AcyrMbJullahgYyLu0QYUGZPs0Gm%2f8%2bn4Nc%3d&risl=&pid=ImgRaw&r=0&";

function render(data) {
  localStorage.setItem("todo", JSON.stringify(data));
  // 先清空内容
  let todoContainer = document.getElementById("todoList");
  todoContainer.innerHTML = "";
  let doneContainer = document.getElementById("doneList");
  doneContainer.innerHTML = "";

  // 直接拼接 HTML
  let todoArr = data.todoArr;
  let todoHTML = "";
  for (let i = 0, len = todoArr.length; i < len; i++) {
    todoHTML += `
        <li>
            <input type="checkbox" id="checkb" data-from="todo" data-index="${i}">
            <span>${todoArr[i]}</span>
            <img src="${imgSrc}" data-from="todo" data-index="${i}">
        </li>`;
  }

  todoContainer.innerHTML = todoHTML;

  // 通过 DOM API
  let doneArr = data.doneArr;
  for (let i = 0, len = doneArr.length; i < len; i++) {
    let li = document.createElement("li");
    let input = document.createElement("input");
    input.type = "checkbox";
    input.setAttribute("checked", "");
    input.dataset.index = i;
    input.dataset.from = "done";

    let span = document.createElement("span");
    span.textContent = doneArr[i];

    let img = document.createElement("img");
    img.src = imgSrc;
    img.dataset.index = i;
    img.dataset.from = "done";

    li.appendChild(input);
    li.appendChild(span);
    li.appendChild(img);
    doneContainer.appendChild(li);
  }
}

// 在文档完全加载后触发 load 事件
window.onload = main;
登录后复制

其他建议

如果您遇到类似问题,请尝试以下步骤:

  • 仔细检查您的代码中是否有拼写错误或语法错误。
  • 使用调试器或 console 日志来帮助您跟踪代码中的执行流程。
  • 将您的代码分解成较小的块,这样更容易识别和隔离问题。
  • 寻求来自其他开发人员的帮助或在在线论坛上发布问题。

以上就是在 JavaScript 中移动 TodoList 中的“正在进行”任务如何解决?的详细内容,更多请关注php中文网其它相关文章!

相关标签:
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号