计数器
你将构建什么
一个计数器页面:显示当前数字,有“加一”和“减一”两个按钮。点击按钮数字相应变化,数字不能小于零。
学习目标
- 用 document.querySelector 获取 DOM 元素
- 用 addEventListener 绑定按钮点击事件
- 用一个变量维护计数器状态,事件触发时更新
- 理解 DOM 操作和事件驱动编程的基本模式
前置要求
- 了解 HTML 基本标签
- 了解 JavaScript 变量和函数
- 会用 <script> 标签引入 JS
步骤
- 1
搭建 HTML 结构
创建 index.html,放一个显示数字的 <span> 和两个按钮。给元素加 id 方便 JS 获取。
代码<p>当前计数:<span id="count">0</span></p> <button id="increment">加一</button> <button id="decrement">减一</button>预期结果
页面显示数字 0 和两个按钮,但点击没有反应。
提示
id 必须唯一,JS 用 getElementById 或 querySelector 获取元素。
- 2
获取 DOM 元素并初始化状态
在 <script> 中用 querySelector 获取显示数字的 span 和两个按钮。声明一个变量 count = 0 保存当前计数。
代码const countEl = document.querySelector('#count'); const incBtn = document.querySelector('#increment'); const decBtn = document.querySelector('#decrement'); let count = 0;预期结果
JS 成功获取三个 DOM 元素,count 初始化为 0。
提示
const 用于不会重新赋值的引用,let 用于会变化的值——这里 count 会变所以用 let。
- 3
绑定按钮点击事件
给“加一”按钮绑定 click 事件:count 加一后更新 span 文本。给“减一”按钮绑定:count 大于 0 时才减一,防止负数。
代码incBtn.addEventListener('click', () => { count++; countEl.textContent = count; }); decBtn.addEventListener('click', () => { if (count > 0) { count--; countEl.textContent = count; } });预期结果
点击“加一”数字递增,点击“减一”数字递减且不会小于 0。
提示
textContent 比 innerHTML 更安全,不会解析 HTML 标签。
- 4
测试边界情况
测试:连续点击“减一”到 0 后再点不应变为 -1;连续点击“加一”数字应持续递增。确认逻辑正确。
预期结果
计数器在 0 处不会变为负数,加一正常递增。
提示
进阶可以加一个“重置”按钮把 count 归零,或用 localStorage 保存计数。
自己动手试试
<p>当前计数:<span id="count">0</span></p>
<button id="increment">加一</button>
<button id="decrement">减一</button>
<script>
// TODO: 获取元素、初始化 count = 0、绑定两个按钮事件
</script><p>当前计数:<span id="count">0</span></p>
<button id="increment">加一</button>
<button id="decrement">减一</button>
<script>
const countEl = document.querySelector('#count');
const incBtn = document.querySelector('#increment');
const decBtn = document.querySelector('#decrement');
let count = 0;
incBtn.addEventListener('click', () => {
count++;
countEl.textContent = count;
});
decBtn.addEventListener('click', () => {
if (count > 0) {
count--;
countEl.textContent = count;
}
});
</script>你学到了什么
你掌握了 DOM 操作和事件监听——这是前端交互的基础模式:获取元素 → 绑定事件 → 更新状态 → 刷新视图。几乎所有前端交互都遵循这个循环。
相关资源
相关练习
- JS 变量选择题
测验变量相关知识。
相关工具
- JSON 格式化工具
格式化 JSON 数据。
相关参考文档
- JavaScript 数组方法
完整的 API 参考。
相关错误
- 无法读取 null 的属性
常见错误及解决方法。
- 类型错误:不是函数
常见错误及解决方法。
相关术语
新手友好的术语表用大白话解释编程术语——变量、函数、DOM、Promise 等等。
相关错误
用大白话解释常见错误——什么意思、为什么发生、如何修复。
- 无法读取 null 的属性
常见错误及解决方法。
- 类型错误:不是函数
常见错误及解决方法。