hocvietcode.com
  • Trang chủ
  • Học lập trình
    • Lập trình C/C++
    • Cấu trúc dữ liệu và giải thuật
    • Lập trình HTML
    • Lập trình Javascript
      • Javascript cơ bản
      • ReactJS framework
      • AngularJS framework
      • Typescript cơ bản
      • Angular
      • NodeJS
    • Lập trình Mobile
      • Lập Trình Dart Cơ Bản
        • Dart Flutter Framework
    • Cơ sở dữ liệu
      • MySQL – MariaDB
      • Micrsoft SQL Server
      • Extensible Markup Language (XML)
      • JSON
      • MongoDB
    • Lập trình PHP
      • Lập trình PHP cơ bản
      • Laravel Framework
    • Lập trình Java
      • Java Cơ bản
    • Lập trình C#
      • Lập Trình C# Cơ Bản
      • ASP.NET Core MVC
    • Machine Learning
    • Git và Github
  • WORDPRESS
    • WordPress cơ bản
    • WordPress nâng cao
    • Chia sẻ WordPress
  • Kiến thức hệ thống
    • Microsoft Azure
    • Docker
    • Linux
  • Chia sẻ IT
    • Tin học văn phòng
      • Microsoft Word
      • Microsoft Excel
    • Marketing
      • Google Adwords
      • Facebook Ads
      • Kiến thức khác
    • Chia sẻ phần mềm
    • Review công nghệ
    • Công cụ – tiện ích
      • Kiểm tra bàn phím online
      • Kiểm tra webcam online
Đăng nhập
  • Đăng nhập / Đăng ký

Please enter key search to display results.

Home
  • Javascript cơ bản
JavaScript cơ bản – Bài 15: Sự kiện và addEventListener: làm bộ đếm tương tác

JavaScript cơ bản – Bài 15: Sự kiện và addEventListener: làm bộ đếm tương tác

  • 17-10-2026
  • Toanngo92
  • 0 Comments

Loạt bài JavaScript cơ bản · Bài 15/18 — Mục lục học tập

Giao diện cần phản hồi khi người dùng bấm nút hoặc nhập dữ liệu. Sự kiện mô tả các tình huống này; addEventListener đăng ký hàm được gọi khi sự kiện xảy ra. Bạn sẽ dùng biến trạng thái kết hợp hàm render để tạo bộ đếm.

Mục lục

  • HTML của bộ đếm
  • Tách dữ liệu và hiển thị
  • Truyền hàm, không gọi hàm ngay
  • event.target và event.currentTarget
  • Bài tập

HTML của bộ đếm

Tạo index.html theo bài 2, giữ script app.js với defer. Đặt phần sau trong body:

<h1>Bộ đếm luyện tập</h1>
<p id="counter" aria-live="polite">0</p>
<button id="increase" type="button">Tăng 1</button>
<button id="reset" type="button">Đặt lại</button>

Dùng button thật để có hành vi bàn phím mặc định. type=”button” tránh việc nút vô tình gửi biểu mẫu khi bạn đặt nó trong một form sau này. aria-live giúp công nghệ hỗ trợ nhận biết phần nội dung được cập nhật.

Tách dữ liệu và hiển thị

const counter = document.querySelector("#counter");
const increaseButton = document.querySelector("#increase");
const resetButton = document.querySelector("#reset");
let count = 0;

function render() {
  counter.textContent = String(count);
}

increaseButton.addEventListener("click", () => {
  count += 1;
  render();
});

resetButton.addEventListener("click", () => {
  count = 0;
  render();
});

render();

Ví dụ giả định ba ID trong HTML đều tồn tại và script chạy sau khi phân tích HTML. Nếu tái sử dụng trên trang khác, hãy kiểm tra các phần tử trước khi đăng ký sự kiện. count là trạng thái; render có nhiệm vụ đồng bộ trạng thái lên giao diện. Cách này rõ ràng hơn đọc con số từ giao diện rồi coi nó là nguồn dữ liệu chính.

Truyền hàm, không gọi hàm ngay

function handleClick(event) {
  console.log("Loại sự kiện:", event.type);
  console.log("Phần tử được bấm:", event.target);
}
increaseButton.addEventListener("click", handleClick);

Trong addEventListener, truyền handleClick thay vì handleClick(). Dạng có ngoặc gọi hàm ngay và thường đưa giá trị trả về sai vào vị trí callback. Bạn có thể dùng hàm có tên khi cần tái sử dụng hoặc tháo listener sau này.

event.target và event.currentTarget

target là phần tử nơi sự kiện bắt nguồn; currentTarget là phần tử đang xử lý listener. Nếu bên trong nút có một biểu tượng và người dùng bấm biểu tượng, target có thể là biểu tượng, còn currentTarget vẫn là nút. Phân biệt này hữu ích khi dùng một listener cho cả danh sách.

Bài tập

Thêm nút giảm nhưng không cho số đếm xuống dưới 0. Kiểm tra bằng chuột và bằng phím Tab, Enter hoặc Space.

// HTML thêm: <button id="decrease" type="button">Giảm 1</button>
const decreaseButton = document.querySelector("#decrease");
decreaseButton.addEventListener("click", () => {
  count = Math.max(0, count - 1);
  render();
});

Ghi nhớ: mỗi sự kiện cập nhật dữ liệu rồi gọi render. Tránh đăng ký thêm listener mỗi lần render vì một lần bấm có thể bị xử lý nhiều lần.


← Bài trước: DOM: chọn phần tử, đổi nội dung và tạo danh sách · Bài tiếp: Biểu mẫu, preventDefault và kiểm tra dữ liệu nhập →

Xem chuyên mục JavaScript cơ bản

Bài viết liên quan:

Khái niệm bất đồng bộ , Async/Await trong javascript
Giới thiệu tổng quan về ES6

THÊM BÌNH LUẬN Cancel reply

Dịch vụ thiết kế Wesbite

NỘI DUNG MỚI CẬP NHẬT

JavaScript cơ bản – Bài 18: Dự án thực hành: ứng dụng quản lý công việc học tập

JavaScript cơ bản – Bài 16: Biểu mẫu, preventDefault và kiểm tra dữ liệu nhập

JavaScript cơ bản – Bài 17: Lưu dữ liệu với localStorage, JSON và try…catch

JavaScript cơ bản – Bài 15: Sự kiện và addEventListener: làm bộ đếm tương tác

JavaScript cơ bản – Bài 13: Xử lý chuỗi và template literal

Giới thiệu

hocvietcode.com là website chia sẻ và cập nhật tin tức công nghệ, chia sẻ kiến thức, kỹ năng. Chúng tôi rất cảm ơn và mong muốn nhận được nhiều phản hồi để có thể phục vụ quý bạn đọc tốt hơn !

Liên hệ quảng cáo: [email protected]

Kết nối với HỌC VIẾT CODE

© hocvietcode.com - Tech888 Co .Ltd since 2019

Đăng nhập

Trở thành một phần của cộng đồng của chúng tôi!
Registration complete. Please check your email.
Đăng nhập bằng google
Đăng kýBạn quên mật khẩu?

Create an account

Welcome! Register for an account
The user name or email address is not correct.
Registration confirmation will be emailed to you.
Log in Lost your password?

Reset password

Recover your password
Password reset email has been sent.
The email could not be sent. Possible reason: your host may have disabled the mail function.
A password will be e-mailed to you.
Log in Register
×