Cách Thêm JavaScript vào HTML cho Người Mới Bắt Đầu

Ngày đăng: July 17, 2025

Javascript

description image

Những điểm chính

  • Sử dụng tệp .js bên ngoài để tổ chức, bảo trì và tái sử dụng tốt hơn.
  • Đặt thẻ <script> trong <head> sẽ chặn việc render và là cách tồi nhất về hiệu suất.
  • Dùng thuộc tính defer cho các script bên ngoài giúp hiệu suất tối ưu.
  • Script bên ngoài được tận dụng bộ nhớ đệm của trình duyệt, ngược lại script nội tuyến thì không.
  • Một tệp .js duy nhất có thể được liên kết trên nhiều trang để dễ dàng cập nhật.
  • Bảng điều khiển nhà phát triển (F12) rất quan trọng để xử lý lỗi JavaScript.

Phương pháp 1: Cách thêm script nội tuyến vào <head>

  • Dùng thẻ <script> trong <head> để chứa mã JavaScript.
  • Thực thi trước khi nội dung trang được render.
  • Không thể tương tác với DOM vì DOM chưa được xây dựng.
  • Phù hợp để định nghĩa hàm/biến hoặc các script phân tích dữ liệu sớm.

Ví dụ:

<head>
  <script>
    let d = new Date();
    alert("Ngày hôm nay là " + d);
  </script>
</head>

Phương pháp 2: Cách thêm script nội tuyến vào <body>

  • Đặt <script> cuối cùng trong <body> đảm bảo tất cả phần tử được phân tích cú pháp trước khi script chạy.
  • Cho phép nội dung hiển thị trước, cải thiện cảm nhận về hiệu suất.
  • Script nội tuyến không thể được bộ nhớ đệm tách biệt.

Ví dụ:

<body>
  <script>
    let d = new Date();
    document.body.innerHTML = "<h1>Ngày hôm nay là " + d + "</h1>";
  </script>
</body>

Phương pháp 3: Cách làm việc với tệp JavaScript riêng biệt

  • Lưu JavaScript trong tệp .js và liên kết qua <script src="...">.
  • Lợi ích:
    • Tách biệt các mối quan tâm (cấu trúc HTML, định dạng CSS, tương tác JS).
    • Tái sử dụng và bảo trì dễ dàng trên nhiều trang.
    • Bộ nhớ đệm trình duyệt cải thiện thời gian tải ở các lần truy cập tiếp theo.

Cấu trúc dự án ví dụ:

project/
├── css/
│   └── style.css
├── js/
│   └── script.js
└── index.html

Liên kết CSS và JS trong HTML:

<head>
  <link rel="stylesheet" href="css/style.css">
</head>
<body>
  <script src="js/script.js"></script>
</body>

Kiểm soát thêm:

  • Dùng defer để tải script bất đồng bộ và thực thi sau khi phân tích DOM.
  • Dùng async để tải bất đồng bộ và chạy ngay khi sẵn sàng (không đảm bảo thứ tự).

Một số ví dụ thực tế là gì?

1. Công tắc Chế độ tối đơn giản

  • Chuyển đổi lớp CSS bằng JS khi nhấn nút.

HTML:

<button id="theme-toggle">Chuyển chế độ tối</button>
<h1 id="title">DigitalOcean</h1>

CSS:

.dark-mode {
  background-color: #222;
  color: #eee;
}

JavaScript:

const toggleButton = document.getElementById('theme-toggle');
toggleButton.addEventListener('click', function() {
  document.body.classList.toggle('dark-mode');
});

2. Xác thực biểu mẫu cơ bản

  • Kiểm tra dữ liệu người dùng khi gửi biểu mẫu mà không tải lại trang.

HTML:

<form id="contact-form">
  <label for="email">Email:</label>
  <input type="text" id="email" placeholder="[email protected]">
  <button type="submit">Đăng ký</button>
  <p id="error-message" style="color: red;"></p>
</form>

JavaScript:

const contactForm = document.getElementById('contact-form');
const emailInput = document.getElementById('email');
const errorMessage = document.getElementById('error-message');

contactForm.addEventListener('submit', function(event) {
  if (!emailInput.value.includes('@')) {
    event.preventDefault();
    errorMessage.textContent = 'Vui lòng nhập địa chỉ email hợp lệ.';
  } else {
    errorMessage.textContent = '';
  }
});

Những lưu ý về hiệu suất cho từng phương pháp là gì?

Script nội tuyến trong <head>

  • Gây chặn lớn khi render; trì hoãn First Contentful Paint (FCP).
  • Script là một phần của HTML, không có lợi thế bộ nhớ đệm.

Script nội tuyến trong <body>

  • Chỉ chặn render tại vị trí script; đặt ở cuối <body> sẽ tốt hơn.
  • Không có lợi thế bộ nhớ đệm.

Tệp JavaScript bên ngoài

  • Tốt nhất về hiệu suất.
  • Tải một lần, được bộ nhớ đệm bởi trình duyệt cho các lần truy cập kế tiếp.
  • Thuộc tính defer tải ngầm và chạy sau khi DOM được phân tích.
  • Thuộc tính async tải và chạy ngay khi sẵn sàng; không đảm bảo thứ tự.

Một số thực hành tốt nhất là gì?

  • Giữ JavaScript trong các tệp bên ngoài để bảo trì sạch sẽ và tận dụng bộ nhớ đệm.
  • Tải script vào cuối <body> với defer để cải thiện trải nghiệm người dùng.
  • Viết code có thể đọc, chú thích rõ ràng.
  • Dùng hàm để tránh lặp lại code.

Một số vấn đề thường gặp và cách khắc phục là gì?

  • "Cannot read properties of null" thường do script chạy trước khi DOM sẵn sàng; đặt script đúng vị trí.
  • Lỗi cú pháp thường có số dòng trên console; kiểm tra thiếu hoặc thừa ký tự.
  • Script không chạy và không lỗi console có thể do sai đường dẫn file; kiểm tra tab Network.
  • Lỗi logic có thể dò bằng cách sử dụng console.log() để kiểm tra trạng thái biến.

Câu hỏi thường gặp (FAQs)

  1. Cách tốt nhất thêm JS: file .js bên ngoài với defer trước </body>.
  2. Đặt script cuối <body>, không đặt trong <head>.
  3. Cho phép nhiều thẻ script; chạy theo thứ tự.
  4. defer giữ thứ tự thực thi sau phân tích, async chạy ngay khi tải xong.
  5. Dùng Developer Tools Console và tab Network, cùng console.log() để gỡ lỗi.

Kết luận

Sử dụng file .js bên ngoài với defer là tốt nhất về hiệu suất và bảo trì. Script nội tuyến chặn việc render và không tận dụng bộ nhớ đệm. Các thực hành tốt và mẹo xử lý lỗi giúp đảm bảo ứng dụng web chuyên nghiệp, tương tác hiệu quả.

Khám phá thêm về Console JavaScript, chú thích code, hoặc đi sâu vào cú pháp và biến với các bài học liên quan.

Tham gia kênh Telegram của CloudFly để nhận thêm ưu đãi và không bỏ lỡ bất kỳ khuyến mãi nào từ CloudFly
Share

0 replies