0

0

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

聖光之護

聖光之護

发布时间:2024-10-22 21:55:58

|

1167人浏览过

|

来源于php

转载

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

javascript 中使用 dom 更新 todolist

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

问题原因

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

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

解决方案

启科PHP淘宝客系统
启科PHP淘宝客系统

1、请上传下载到的淘宝客系统安装包并上传到空间根目录中进行解压,解压后将网站文件移动到根目录的位置,然后访问 /install 进行安装。您也可以在本地解压,并以二进制方式将程序上传至您的网站空间。 2、同意启科网络电子商务系统安装协议进入下一步。 3、如果系统检测环境通过,则会提示输入您的数据库服务器地址(一般为本机,即127.0.0.1或者localhost)、数据库账号、数据库密码、数据库名

下载

将代码中的所有“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 += `
        
  • ${todoArr[i]} @@##@@
  • `; } 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 中的“正在进行”任务如何解决?

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    js获取数组长度的方法
    js获取数组长度的方法

    在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

    557

    2023.06.20

    js刷新当前页面
    js刷新当前页面

    js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

    394

    2023.07.04

    js四舍五入
    js四舍五入

    js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

    754

    2023.07.04

    js删除节点的方法
    js删除节点的方法

    js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

    478

    2023.09.01

    JavaScript转义字符
    JavaScript转义字符

    JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

    454

    2023.09.04

    js生成随机数的方法
    js生成随机数的方法

    js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

    1031

    2023.09.04

    如何启用JavaScript
    如何启用JavaScript

    JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

    658

    2023.09.12

    Js中Symbol类详解
    Js中Symbol类详解

    javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

    554

    2023.09.20

    AO3中文版入口地址大全
    AO3中文版入口地址大全

    本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

    1

    2026.01.21

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

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