JavaScript实战:制作一个待办事项列表应用

news2024/11/26 5:33:59

JavaScript实战:制作一个待办事项列表应用

引言

在本教程中,我们将一步步创建一个简单的待办事项列表应用,这不仅会帮助你学习基本的JavaScript编程概念,还会教会你如何处理事件以及操作DOM。这个项目是面向初学者的,旨在提供实际操作的经验。
在这里插入图片描述

知识准备

  • HTML基础:了解如何编写基础的HTML结构。
  • CSS基础:理解如何使用CSS进行样式设置。
  • JavaScript基础:熟悉变量、函数、数组和对象的概念。

第一步:创建应用的HTML结构

首先,我们需要创建一个简单的HTML页面,它将作为我们待办事项列表的骨架。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>待办事项列表应用</title>
    <!-- 可以在这里添加CSS或链接外部样式表 -->
</head>
<body>
    <div id="app">
        <h1>我的待办事项</h1>
        <form id="todo-form">
            <input type="text" id="todo-input" placeholder="添加新的待办事项...">
            <button type="submit">添加</button>
        </form>
        <ul id="todo-list">
            <!-- 待办事项将在这里动态插入 -->
        </ul>
    </div>
    <!-- 在此处链接外部JavaScript文件 -->
</body>
</html>

第二步:添加样式

我们的应用可能会很基础,但添加一些简单的样式可以让它看起来更好。

/* 在此添加基础样式 */
body {
    font-family: 'Arial', sans-serif;
    background: #f4f4f4;
    color: #333;
    line-height: 1.6;
}

#app {
    width: 300px;
    margin: 30px auto;
}

#todo-form input[type="text"] {
    width: 70%;
    padding: 10px;
}

#todo-form button {
    width: 25%;
    background: #333;
    color: white;
    padding: 10px;
    border: none;
}

#todo-list {
    list-style: none;
    padding: 0;
}

#todo-list li {
    background: #fff;
    margin-bottom: 5px;
    padding: 10px;
    text-align: left;
}

第三步:编写JavaScript逻辑

现在,我们将使用JavaScript为我们的应用添加交互性。

3.1 获取元素引用

// 获取DOM元素的引用
const todoForm = document.getElementById('todo-form');
const todoInput = document.getElementById('todo-input');
const todoList = document.getElementById('todo-list');

3.2 添加事件监听器

// 处理表单提交事件
todoForm.addEventListener('submit', function(event) {
    event.preventDefault(); // 阻止表单默认提交行为

    // 获取用户输入的待办事项
    const newTodoText = todoInput.value.trim();

    // 检查输入不为空
    if (newTodoText !== '') {
        addTodoItem(newTodoText);
        todoInput.value = ''; // 清空输入框
    }
});

3.3 添加新的待办事项

function addTodoItem(text) {
    // 创建新的li元素
    const li = document.createElement('li');
    li.textContent = text;
    
    // 添加删除按钮
    const deleteBtn = document.createElement('button');
    deleteBtn.textContent = '删除';
    deleteBtn.onclick = function() {
        li.remove();
    };
    li.appendChild(deleteBtn);

    // 将新的待办事项添加到列表中
    todoList.appendChild(li);
}

第四步:本地存储和加载待办事项

为了保证用户在关闭浏览器后再次访问应用时能够看到之前的待办事项,我们可以使用浏览器的LocalStorage功能。

4.1 在添加新待办事项时存储数据

function addTodoItem(text) {
    // ...之前的代码

    // 存储待办事项到LocalStorage
    saveTodos();
}

4.2 存储和加载函数

function saveTodos() {
    const todos = [];
    document.querySelectorAll('#todo-list li').forEach(function(item) {
        todos.push(item.textContent.replace('删除', '').trim());
    });
    localStorage.setItem('todos', JSON.stringify(todos));
}

function loadTodos() {
    const todos = JSON.parse(localStorage.getItem('todos')) || [];
    todos.forEach(addTodoItem);
}

// 页面加载时调用loadTodos
document.addEventListener('DOMContentLoaded', loadTodos);

以上是文章的大纲和部分内容,整篇文章可以根据这个基础继续扩展,深入解释每个概念,添加代码注释,增加更多的功能,如编辑待办事项、排序或筛选功能。您可以通过增加更多的例子,提示,最佳实践和相关资源,来帮助读者更好地理解并实践。不要忘了在文章的末尾添加总结部分,回顾已经学到的知识,并鼓励读者继续学习和探索JavaScript的更多功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1292091.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

NFTScan Labs:我们为什么要推出 L2 网络 Mint Blockchain?

发展背景 NFT&#xff08;非同质化代币&#xff09;是一种储存在区块链上的加密数据单位&#xff0c;它可以代表身份、合同、权益、声誉、社交关系等独一无二的数字资产。与比特币等加密货币不同&#xff0c;NFT 资产不可互换&#xff0c;每一枚 NFT 都是独一无二的链上资产。N…

力扣题:字符的统计-12.6

力扣题-12.6 [力扣刷题攻略] Re&#xff1a;从零开始的力扣刷题生活 力扣题1&#xff1a;696. 计数二进制子串 解题思想&#xff1a;先统计连续的0和连续的1的个数&#xff0c;然后进行相加即可&#xff08;想不到一点&#xff09; class Solution(object):def countBinaryS…

怎么用电源芯片测试系统测试电源管理芯片的性能?

电源芯片用于电源转换和管理&#xff0c;其性能直接影响着电源管理芯片的工作效率和可靠性&#xff0c;影响电子设备的质量和性能。因此&#xff0c;性能测试是电源芯片测试的重要步骤&#xff0c;用电源芯片测试系统测试其性能&#xff0c;可以确保测试数据及测试结果的准确性…

m1编译xgboost的jar报错

1、编译 cd jvm-package包&#xff0c;然后进行编译mvn install -P libxgboost,java -DskipTests 2、报错信息&#xff1a; 3、解决方法 A、在jvm-packages包下找到xgboost4j中找到pom.xml&#xff0c;如图&#xff1a; B、修改python的额目录或者脚本&#xff1a; C、继续执…

普华永道:国有企业要动态布局和管理供应商资源池

近日&#xff0c;普华永道发布《动态布局和管理供应商资源池&#xff0c;助力国企数字化供应链建设》研究文章中建议&#xff1a;国有企业需要将采购寻源作为供应链管理的起始点&#xff0c;管理供应商资源池&#xff0c;实施供应链数字化转型的发展战略&#xff0c;不仅能解决…

数据分析基础之《matplotlib(4)—柱状图》

一、柱状图绘制 1、柱状图要素 有类别 2、需求&#xff1a;对比每部电影的票房收入 电影数据如下图所示&#xff1a; 3、matplotlib.pyplot.bar(x, height, width0.8, bottomNone, *, aligncenter, dataNone, **kwargs) 说明&#xff1a; x&#xff1a;有几个类别 height&am…

电压放大器可用于什么电路

电压放大器是一种常见的电子器件&#xff0c;其主要功能是放大输入信号的电压幅度。它可以用于多种电路中&#xff0c;下面西安安泰将详细介绍几个典型的应用场景。 首先&#xff0c;电压放大器可以用于音频放大器电路。音频放大器广泛应用于音响设备、电视机、电脑音箱等&…

PDF编辑器免费版有哪些?哪个好用?

日常工作和学习中,普通的PDF的阅读器通常无法进行编辑,更别说逆向导出成为Word、PPT或者Excel了。而且。市场上很多PDF编辑器还要收费。那么问题来了,PDF编辑器免费版有哪些呢?这就给大家安利几款,强烈建议收藏! PDF编辑器免费版一:PDF24 这款编辑器的功能有主要有PDF的合并、…

[MySQL] MySQL中的内置函数

本篇文章主要是对MySQL中常见的内置函数进行了详细解释。例如有日期类函数、字符串类函数、数学类函数等等。希望本篇文章会对你有所帮助。 文章目录 一、日期类函数 1、1 使用详解 1、2 实例演示 二、字符串函数 2、1 使用详解 2、2 实例演示 三、数学函数 四、其他函数 &…

C语言二叉树的基本概念(一)

目录 二叉树 二叉树的分类&#xff08;目前只谈两种&#xff09; 满二叉树 完全二叉树 二叉树的性质&#xff08;其余的可以自己总结&#xff09; 选择练习 二叉树的存储结构 顺序存储方式 链式存储方式 二叉树 定义&#xff1a;二叉树是一种特殊的树状数据结构&…

为什么伦敦银交易中支撑和阻力位这么重要?

在伦敦银交易中&#xff0c;支撑阻力位是我们做伦敦银技术分析不可缺少的一部分。到底为什么支撑阻力位这么重要呢&#xff1f;下面我们就来讨论一下。 什么才是主要的支撑阻力位&#xff1f;通常来说&#xff0c;前期的高点和低点是主要的支撑阻力位所在的位置。为什么这些位置…

C - 语言->内存函数

目录 系列文章目录 前言 1. memcpy使⽤和模拟实现 1.2 memcpy函数的模拟实现: 2. memmove 使⽤和模拟实现 2.1memmove的模拟实现&#xff1a; 3. memset 函数的使⽤ 4. memcmp 函数的使⽤ 系列文章目录 ✅作者简介&#xff1a;大家好&#xff0c;我是橘橙黄又青&#xff…

如何让软文更具画面感,媒介盒子分享

写软文这种带有销售性质的文案时&#xff0c;总说要有画面感&#xff0c;要有想象空间。只有针对目标用户的感受的设计&#xff0c;要了解用户想的是什么&#xff0c;要用可视化的描述来影响用户的感受&#xff0c;今天媒介盒子就和大家分享&#xff1a;如何让软文更具画面感。…

postgresql从入门到精通 - 第37讲:postgres物理备份和恢复概述

PostgreSQL从小白到专家&#xff0c;是从入门逐渐能力提升的一个系列教程&#xff0c;内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容&#xff0c;希望对热爱PG、学习PG的同学们有帮助&#xff0c;欢迎持续关注CUUG PG技术大讲堂。 第37讲&#…

HarmonyOS 开发 Java 与 ArkTS 如何抉择?

本文详细分析 Java 与 ArkTS 在 HarmonyOS 开发过程的区别&#xff0c;力求解答学员的一些困惑。 何为 HarmonyOS&#xff1f; 在讨论语言的差异时&#xff0c;我们先了解下什么是 HarmonyOS。华为官方是这么解释 HarmonyOS 的&#xff1a; “鸿蒙操作系统”特指华为智能终端…

2023本人最全的私有笔记分享:pip的基本命令和使用

23年12月1日最后更新。 选择的命令pip。至少都是在python 3.6以上的。 更多内容见&#xff1a;链接&#xff1a;https://pan.baidu.com/s/19mS5N9XJ_AotF20kUwSA3w?pwdp5kx 提取码&#xff1a;p5kx 3. Pip命令相关&#xff1a; 1、注意&#xff1a;所有的pip在命令窗口执…

网络监控:网络故障告警通知

网络警报是向网络管理员发出的指示&#xff0c;表明设备已达到其设置的阈值或面临任何性能异常&#xff0c;网络警报可以通过不同的渠道通知网络管理员&#xff0c;例如电子邮件、短信、松弛、网络警报等。 通过网络监控警报&#xff0c;可以快速了解网络问题&#xff0c;通过…

如何通过内网穿透实现无公网IP也能远程访问内网的宝塔面板

文章目录 一、使用官网一键安装命令安装宝塔二、简单配置宝塔&#xff0c;内网穿透三、使用固定公网地址访问宝塔 宝塔面板作为建站运维工具&#xff0c;适合新手&#xff0c;简单好用。当我们在家里/公司搭建了宝塔&#xff0c;没有公网IP&#xff0c;但是想要在外也可以访问内…

PD-1、BRAF和MEK联合抑制BRAFV600E结直肠癌癌症的2期试验

今天给同学们分享一篇文章“Combined PD-1, BRAF and MEK inhibition in BRAFV600E colorectal cancer: a phase 2 trial”&#xff0c;这篇文章发表在Nat Med期刊上&#xff0c;影响因子为82.9。 结果解读&#xff1a; MAPK抑制增强BRAF V600E CRC的免疫反应 作者之前在BRAF…

架构师-3.用户体系

系统提供了 2 种类型的用户,分别满足对应的管理后台、用户 App 场景。 1.AdminUser 管理员用户,前端访问 s-ui-admin-vue3管理后台,后端访问 /admin-api/** RESTful API 接口。 2.MemberUser 会员用户,前端访问 s-ui-user用户 App,后端访问 /app-api/** RESTful API 接口。…