Buổi 2: Tạo giao diện & Xử lý form nhập liệu cơ bản
Loại buổi: Thực hành
Thời lượng: 120 phút
Dự án: To-Do App - Bắt đầu xây dựng
🎯 Mục tiêu học tập
Sau buổi học này, bạn sẽ có thể:
- ✅ Tạo giao diện HTML/CSS cho To-Do App
- ✅ Nhúng JavaScript vào HTML
- ✅ Lấy giá trị từ form input
- ✅ Xử lý sự kiện submit form
- ✅ Hiển thị thông tin ra console/alert
🧩 Task Project
Task 1: Tạo cấu trúc HTML cơ bản (20 phút)
Tạo file index.html với cấu trúc sau:
html
<!DOCTYPE html>
<html lang="vi">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>To-Do App</title>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<div class="container">
<h1>Quản lý Công Việc</h1>
<form id="form-cong-viec">
<div class="form-group">
<label for="ten-cong-viec">Tên công việc:</label>
<input
type="text"
id="ten-cong-viec"
placeholder="Nhập tên công việc..."
required
/>
</div>
<div class="form-group">
<label for="mo-ta">Mô tả (tùy chọn):</label>
<textarea id="mo-ta" rows="3" placeholder="Mô tả công việc..."></textarea>
</div>
<button type="submit">Thêm công việc</button>
</form>
<div id="ket-qua"></div>
</div>
<script src="main.js"></script>
</body>
</html>Task 2: Tạo CSS cơ bản (15 phút)
Tạo file styles.css:
css
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: Arial, sans-serif;
background-color: #f5f5f5;
padding: 20px;
}
.container {
max-width: 600px;
margin: 0 auto;
background: white;
padding: 30px;
border-radius: 8px;
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
}
h1 {
color: #333;
margin-bottom: 20px;
text-align: center;
}
.form-group {
margin-bottom: 15px;
}
label {
display: block;
margin-bottom: 5px;
font-weight: bold;
color: #555;
}
input[type="text"],
textarea {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 16px;
}
button {
background-color: #4caf50;
color: white;
padding: 12px 24px;
border: none;
border-radius: 4px;
font-size: 16px;
cursor: pointer;
width: 100%;
}
button:hover {
background-color: #45a049;
}
#ket-qua {
margin-top: 20px;
padding: 15px;
background-color: #f9f9f9;
border-radius: 4px;
min-height: 50px;
}Task 3: Xử lý form với JavaScript (40 phút)
Tạo file main.js:
javascript
// Bước 1: Lấy form element
const form = document.getElementById("form-cong-viec");
// Bước 2: Lắng nghe sự kiện submit
form.addEventListener("submit", function (event) {
// Ngăn form submit mặc định (reload trang)
event.preventDefault();
// Bước 3: Lấy giá trị từ input
const tenCongViec = document.getElementById("ten-cong-viec").value;
const moTa = document.getElementById("mo-ta").value;
// Bước 4: Hiển thị thông tin
console.log("Tên công việc:", tenCongViec);
console.log("Mô tả:", moTa);
// Hiển thị ra màn hình
const ketQua = document.getElementById("ket-qua");
ketQua.innerHTML = `
<h3>Thông tin công việc:</h3>
<p><strong>Tên:</strong> ${tenCongViec}</p>
<p><strong>Mô tả:</strong> ${moTa || "Không có mô tả"}</p>
`;
// Bước 5: Reset form
form.reset();
});Hướng dẫn từng bước:
Lấy form element:
- Dùng
document.getElementById('form-cong-viec') - Lưu vào biến
form
- Dùng
Lắng nghe sự kiện submit:
- Dùng
form.addEventListener('submit', function...) - Tham số
eventchứa thông tin sự kiện - Dùng
event.preventDefault()để ngăn reload trang
- Dùng
Lấy giá trị từ input:
- Dùng
.valueđể lấy giá trị document.getElementById('ten-cong-viec').value
- Dùng
Hiển thị thông tin:
- Dùng
console.log()để in ra console - Dùng
innerHTMLđể hiển thị ra màn hình
- Dùng
Reset form:
- Dùng
form.reset()để xóa input
- Dùng
Task 4: Cải thiện với Alert (15 phút)
Thêm validation và hiển thị alert:
javascript
form.addEventListener("submit", function (event) {
event.preventDefault();
const tenCongViec = document.getElementById("ten-cong-viec").value.trim();
const moTa = document.getElementById("mo-ta").value.trim();
// Kiểm tra dữ liệu
if (tenCongViec === "") {
alert("Vui lòng nhập tên công việc!");
return; // Dừng hàm
}
// Hiển thị thông báo
alert(`Đã thêm công việc: ${tenCongViec}`);
// Hiển thị ra màn hình
const ketQua = document.getElementById("ket-qua");
ketQua.innerHTML = `
<h3>Thông tin công việc:</h3>
<p><strong>Tên:</strong> ${tenCongViec}</p>
<p><strong>Mô tả:</strong> ${moTa || "Không có mô tả"}</p>
<p><em>Thời gian tạo: ${new Date().toLocaleString("vi-VN")}</em></p>
`;
form.reset();
});Task 5: Thêm tính năng (30 phút)
Task 5.1: Thêm input Độ ưu tiên
html
<div class="form-group">
<label for="do-uu-tien">Độ ưu tiên:</label>
<select id="do-uu-tien">
<option value="cao">Cao</option>
<option value="trung-binh" selected>Trung bình</option>
<option value="thap">Thấp</option>
</select>
</div>Task 5.2: Hiển thị tất cả thông tin
javascript
const doUuTien = document.getElementById("do-uu-tien").value;
ketQua.innerHTML = `
<h3>Thông tin công việc:</h3>
<p><strong>Tên:</strong> ${tenCongViec}</p>
<p><strong>Mô tả:</strong> ${moTa || "Không có mô tả"}</p>
<p><strong>Độ ưu tiên:</strong> ${doUuTien}</p>
<p><em>Thời gian: ${new Date().toLocaleString("vi-VN")}</em></p>
`;Task 5.3: Thêm CSS cho select
css
select {
width: 100%;
padding: 10px;
border: 1px solid #ddd;
border-radius: 4px;
font-size: 16px;
}✅ Checklist hoàn thành
- [ ] Đã tạo file
index.htmlvới form đầy đủ - [ ] Đã tạo file
styles.cssvà style đẹp - [ ] Đã tạo file
main.jsvà xử lý form submit - [ ] Form không reload trang khi submit
- [ ] Lấy được giá trị từ input và hiển thị ra console
- [ ] Hiển thị thông tin ra màn hình
- [ ] Có validation (kiểm tra input rỗng)
- [ ] Form reset sau khi submit
- [ ] Thêm được tính năng độ ưu tiên
🧪 Checkpoint
Câu hỏi kiểm tra:
- Làm thế nào để ngăn form reload trang khi submit?
- Cách lấy giá trị từ input text là gì?
event.preventDefault()dùng để làm gì?- Cách hiển thị thông tin ra màn hình HTML?
Đáp án:
- Dùng
event.preventDefault()trong event listener - Dùng
.valuecủa element:element.value - Ngăn hành vi mặc định của phần tử (form submit)
- Dùng
element.innerHTMLhoặcelement.textContent
📝 Bài tập về nhà
- Thêm input "Ngày hết hạn" (date picker)
- Thêm input "Thời gian" (time picker)
- Hiển thị thông tin đầy đủ với format đẹp
- Thử nghiệm với các loại input khác (checkbox, radio)
💡 Tips
- Luôn dùng
trim()để loại bỏ khoảng trắng thừa - Kiểm tra dữ liệu trước khi xử lý
- Dùng
console.log()để debug - Test trên nhiều trình duyệt khác nhau
Chúc bạn hoàn thành tốt! 🚀