1. Khởi động (Engagement)
Để tham gia hội chợ ẩm thực do Đoàn trường tổ chức, lớp em dự định tạo một trang web để quảng bá các món ăn vặt và nhận đơn đặt hàng trực tuyến từ các bạn học sinh trong toàn trường. 🍧🧋🍰
💡 Thảo luận mở đầu:
Để khách hàng có thể chọn món ăn, nhập số lượng, ghi địa chỉ giao nhận và bấm gửi đơn hàng, trang web cần cung cấp những thành phần giao diện nào? Ngôn ngữ HTML cung cấp công cụ gì để đáp ứng nhu cầu này?
Trả lời gợi ý:
- Trang web cần các ô nhập văn bản (Họ tên, Số điện thoại, Địa chỉ giao hàng), hộp chọn danh sách thả xuống (Chọn món, Kích cỡ phần ăn), nút chọn số lượng, và một nút bấm "Đặt hàng ngay".
- Trong HTML, công cụ thực hiện nhiệm vụ này chính là Biểu mẫu web (Web Form) với thẻ
<form>cùng hệ thống các thẻ nhập liệu phong phú (<input>,<select>,<textarea>,...).
2. Hình thành kiến thức (Knowledge)
1. Khái niệm và cấu trúc Biểu mẫu Web (Form)
a) Biểu mẫu web là gì?
Biểu mẫu web (Web Form) là công cụ thu thập thông tin và tương tác trực tiếp giữa người dùng với hệ thống trang web. Khi người dùng nhập dữ liệu và nhấn nút gửi, thông tin sẽ được xử lý tại chỗ hoặc đóng gói gửi về máy chủ (Server).
Một hệ thống biểu mẫu đầy đủ bao gồm hai thành phần:
- Biểu mẫu hiển thị trên trình duyệt (Front-end HTML): Được tạo bởi các thẻ HTML, cung cấp giao diện trực quan cho người dùng nhập liệu, chọn lựa và bấm gửi.
- Ứng dụng hoặc kịch bản xử lý dữ liệu (Back-end Script): Thường nằm trên máy chủ web (viết bằng PHP, Python, NodeJS,...), tiếp nhận dữ liệu gửi lên, kiểm tra tính hợp lệ và lưu vào cơ sở dữ liệu.
b) Cấu trúc thẻ <form>
Biểu mẫu được bao bọc bởi cặp thẻ đóng/mở <form>...</form>:
action: Đường dẫn tới tệp tin xử lý dữ liệu trên máy chủ khi form được gửi đi.method: Phương thức truyền dữ liệu (thường làPOSTđể bảo mật hoặcGETkhi tìm kiếm).
2. Các phần tử điều khiển trong biểu mẫu
a) Thẻ nhãn <label>
Thẻ <label> định nghĩa nhãn mô tả cho phần tử nhập liệu.
[!TIP] Khi người dùng nhấp chuột vào chữ trên nhãn (
<label>), con trỏ chuột sẽ tự động nhảy tiêu điểm (focus) vào ô nhập liệu cóidtương ứng với thuộc tínhfor. Điều này nâng cao trải nghiệm người dùng, đặc biệt trên màn hình cảm ứng điện thoại!
b) Phần tử nhập liệu đa năng <input>
<input> là thẻ đơn (không có thẻ đóng), xác định vùng tiếp nhận thông tin từ người dùng:
id: Mã định danh duy nhất của phần tử trong trang web (dùng kết nối vớiforcủa<label>hoặc CSS/JS).name: Tên định danh của biến dữ liệu, máy chủ sẽ dùng tên này để nhận biết dữ liệu gửi đến.type: Thuộc tính then chốt quyết định kiểu hiển thị và hành vi nhập liệu của phần tử.
Bảng 12.1: Một số kiểu type thông dụng của thẻ <input>
Thuộc tính type | Cú pháp ví dụ | Ý nghĩa và hành vi |
|---|---|---|
text | <input type="text" name="hoten"> | Tạo ô nhập văn bản một dòng ngắn gọn (họ tên, địa chỉ,...). |
password | <input type="password" name="matkhau"> | Nhập mật khẩu, các ký tự gõ vào tự động che khuất bằng dấu chấm tròn hoặc sao ••••. |
radio | <input type="radio" name="gioitinh" value="nam"> | Nút chọn một giá trị duy nhất trong một nhóm. Các nút cùng nhóm bắt buộc phải có chung giá trị name. |
checkbox | <input type="checkbox" name="sothich" value="thethao"> | Hộp kiểm chọn nhiều giá trị độc lập (chọn hoặc không chọn). |
number | <input type="number" name="tuoi" min="1" max="100"> | Ô chỉ cho phép nhập ký số, có nút tăng giảm giá trị. |
date | <input type="date" name="ngaysinh"> | Hộp chọn ngày tháng năm kèm bảng lịch trực quan. |
file | <input type="file" name="anh_daidien"> | Nút chọn tệp tin từ máy tính hoặc điện thoại tải lên máy chủ. |
button | <input type="button" value="Bấm vào đây"> | Tạo một nút nhấn thông thường (thường gắn kịch bản JavaScript). |
submit | <input type="submit" value="Gửi thông tin"> | Tạo nút đặc biệt dùng để đóng gói và gửi toàn bộ dữ liệu trong biểu mẫu đến máy chủ. |
c) Danh sách lựa chọn thả xuống <select> và <option>
Dùng khi danh sách có nhiều lựa chọn giúp tiết kiệm diện tích trang web:
d) Vùng nhập văn bản nhiều dòng <textarea>
Dành cho các đoạn văn bản dài như phản hồi, lời nhắn, nội dung bài viết:
e) Nhóm phần tử bằng <fieldset> và <legend>
Giúp nhóm các ô nhập liệu có liên quan lại với nhau trong một đường viền bo quanh đẹp mắt kèm tiêu đề nhóm:
3. Câu hỏi củng cố (Trang 69 SGK)
Câu 1: Điểm khác biệt giữa radio, checkbox và select là gì?
radio: Người dùng chỉ được phép chọn duy nhất 1 lựa chọn trong một nhóm các phương án loại trừ lẫn nhau (ví dụ: Giới tính Nam/Nữ).checkbox: Cho phép người dùng chọn cùng lúc nhiều phương án độc lập hoặc không chọn phương án nào (ví dụ: Môn thể thao yêu thích).select: Tạo danh sách lựa chọn dạng hộp thả xuống (dropdown). Giúp tiết kiệm không gian màn hình tối đa, rất thích hợp khi danh sách có từ 4–5 lựa chọn trở lên (ví dụ: Tỉnh/Thành phố).
Câu 2: Hãy viết câu lệnh để thêm một nút có tên "Quên mật khẩu" vào biểu mẫu.
3. Luyện tập thực hành (Practice)
Nhiệm vụ 1: Biểu mẫu nhập thông tin món ăn (Trang 69 SGK)
Yêu cầu: Tạo biểu mẫu nhập thông tin món ăn gồm các trường: Tiêu đề "Thông tin món ăn", Tên món ăn, Đơn giá, Số lượng.
Nhiệm vụ 2: Biểu mẫu đăng ký thi tốt nghiệp THPT (Trang 70 SGK)
Yêu cầu: Tạo biểu mẫu đăng ký thông tin môn thi tốt nghiệp hoàn chỉnh với các thành phần:
- Họ và tên:
type="text" - Số CCCD:
type="number" - Ngày sinh:
type="date" - Giới tính: Chọn 1 trong 2 giá trị bằng
type="radio"(Nam / Nữ) - Môn thi:
type="checkbox"(Toán, Ngữ văn, Ngoại ngữ) - Tổ hợp: Danh sách thả xuống
<select>chọn Khoa học tự nhiên hoặc Khoa học xã hội - Nút gửi thông tin:
type="submit" - Toàn bộ nội dung nằm gọn trong khung viền
<fieldset>có tiêu đề<legend>là "Đăng kí môn thi tốt nghiệp".
4. Vận dụng (Application)
Vận dụng 1 (Trang 70 SGK): Biểu mẫu đăng ký thành viên Câu lạc bộ Tin học
Xây dựng trang web dangky_clb.html để thu hút học sinh tham gia sinh hoạt CLB:
Vận dụng 2 (Trang 70 SGK): Tích hợp biểu mẫu mở trong khung nội tuyến <iframe>
Mở lại tệp web ở Nhiệm vụ 2 - Bài 11, bổ sung một siêu liên kết <a href="dangky_clb.html" target="target_frame">Đăng ký thành viên</a>. Khi người dùng click chuột vào liên kết này, biểu mẫu đăng ký sẽ lập tức hiển thị mượt mà ngay trong khung <iframe> mà không cần tải lại toàn bộ trang web!
Ghi nhớ kiến thức cốt lõi 🎯
- 📝 Biểu mẫu
<form>: Phần tử thu thập dữ liệu người dùng gửi về máy chủ, gồm 2 thành phần chính: giao diện web (HTML) và mã kịch bản xử lý (Back-end). - 🏷 Nhãn
<label>: Tăng tính tiện dụng; kết nối bằng thuộc tínhfortrùng khớp vớiidcủa trường nhập liệu. - 🎛 Phần tử
<input>: Phần tử nhập liệu trung tâm với các kiểu dữ liệu phong phú:text,password,radio(chọn 1 trong nhóm cùngname),checkbox(chọn nhiều),number,date,file,button,submit. - 📋 Hộp thả xuống
<select>: Chứa các thẻ<option>bên trong, hiển thị danh sách lựa chọn gọn gàng, tiết kiệm không gian. - 📜 Đoạn văn bản
<textarea>: Tiếp nhận dữ liệu văn bản nhiều dòng với hai thuộc tính kích thướcrows(dòng) vàcols(cột). - 📦 Gom nhóm
<fieldset>&<legend>: Tạo đường viền nhóm các thông tin liên quan kèm tiêu đề mô tả trực quan.