Các kiểu input trong form

Thuộc tính type biến input thành hơn 20 loại ô nhập khác nhau: chữ, số, ngày giờ, màu, tệp, thanh trượt... Chọn đúng type giúp trình duyệt tự kiểm tra dữ liệu và điện thoại hiện bàn phím phù hợp.

45 phútTrung cấp
Bạn sẽ học được
  • Dùng các type nhập văn bản: text, password, email, tel, url, search
  • Dùng type số và ngày giờ
  • Dùng checkbox, radio, file, color, range, hidden
  • Phân biệt submit, reset, button, image

Khái niệm và lý thuyết

Không có type, input mặc định là text. Trình duyệt không hỗ trợ một type nào đó cũng tự lùi về text, nên dùng type mới luôn an toàn. Trên điện thoại, type="email" hiện bàn phím có @, type="tel" hiện bàn phím số, type="url" có phím “.com”.

Nhập văn bản

<p><label>text: <input type="text" name="ho_ten"></label></p>
<p><label>password: <input type="password" name="mk" value="matkhau123"></label></p>
<p><label>email: <input type="email" name="email" placeholder="Địa chỉ email này đang được bảo vệ từ spam bots, bạn cần kích hoạt Javascript để xem nó. Bạn cần kích hoạt Javascript để xem nó."></label></p>
<p><label>tel: <input type="tel" name="sdt" placeholder="0912 345 678"></label></p>
<p><label>url: <input type="url" name="web" placeholder="https://"></label></p>
<p><label>search: <input type="search" name="tu_khoa" placeholder="Tìm kiếm..."></label></p>
Kết quả hiển thị

Số và thanh trượt

<p><label>number: <input type="number" name="so_luong" min="1" max="10" step="1" value="1"></label></p>
<p><label>range: <input type="range" name="am_luong" min="0" max="100" value="60"
  oninput="this.nextElementSibling.value = this.value"> <output>60</output></label></p>
Kết quả hiển thị

Ngày và giờ

<p><label>date: <input type="date" name="ngay"></label></p>
<p><label>time: <input type="time" name="gio"></label></p>
<p><label>datetime-local: <input type="datetime-local" name="lich_hen"></label></p>
<p><label>month: <input type="month" name="thang"></label></p>
<p><label>week: <input type="week" name="tuan"></label></p>
Kết quả hiển thị

Giá trị gửi đi luôn theo chuẩn ISO (ví dụ 2026-11-10), dù trình duyệt hiển thị theo định dạng ngày Việt Nam.

Lựa chọn: checkbox và radio

<p>Sở thích (chọn nhiều):
  <label><input type="checkbox" name="so_thich" value="doc-sach" checked> Đọc sách</label>
  <label><input type="checkbox" name="so_thich" value="the-thao"> Thể thao</label>
  <label><input type="checkbox" name="so_thich" value="am-nhac"> Âm nhạc</label></p>
<p>Hệ đào tạo (chọn một):
  <label><input type="radio" name="he" value="chinh-quy" checked> Chính quy</label>
  <label><input type="radio" name="he" value="vlvh"> Vừa làm vừa học</label></p>
Kết quả hiển thị

Sở thích (chọn nhiều):

Hệ đào tạo (chọn một):

Các radio cùng nhóm phải có cùng name; mỗi ô cần value riêng, nếu không máy chủ chỉ nhận chữ “on”.

Tệp, màu, ẩn

<p><label>file: <input type="file" name="anh" accept="image/*" multiple></label></p>
<p><label>color: <input type="color" name="mau" value="#2e7d32"></label></p>
<input type="hidden" name="ma_lop" value="K66-TIN">
<p><small>Có một input hidden gửi kèm mã lớp mà người dùng không thấy.</small></p>
Kết quả hiển thị

Có một input hidden gửi kèm mã lớp mà người dùng không thấy.

accept lọc loại tệp (image/*, .pdf); trên điện thoại, accept="image/*" capture mở thẳng máy ảnh.

Các loại nút

<form onsubmit="alert('Đã gửi'); return false;">
  <input type="text" name="x" value="abc">
  <input type="submit" value="Gửi">
  <input type="reset" value="Nhập lại">
  <input type="button" value="Nút thường" onclick="alert('Không gửi form')">
</form>
Kết quả hiển thị

type="image" dùng ảnh làm nút gửi. Hiện nay nên dùng phần tử <button> vì chứa được cả biểu tượng và chữ.

Bảng tổng hợp

typeMục đíchKiểm tra tự động
textChữ một dòngKhông
passwordMật khẩu, che ký tựKhông
emailEmailCó @ và tên miền
urlĐịa chỉ webCó giao thức
telĐiện thoạiKhông (dùng pattern)
numberSốmin, max, step
date, time...Ngày giờmin, max
checkbox, radioLựa chọnrequired
fileTệpaccept (gợi ý)
color, rangeMàu, khoảng giá trịLuôn hợp lệ
hiddenDữ liệu ẩnKhông
Mẹo hay

Gặp số điện thoại, mã sinh viên, mã OTP: dùng type="text" inputmode="numeric" thay vì type="number" để giữ số 0 đầu và không có nút tăng giảm.

Lưu ý

input hidden không bí mật: ai cũng xem và sửa được bằng DevTools. Không đặt giá tiền hay quyền truy cập trong hidden rồi tin tưởng nó ở máy chủ.

Thực hành
  1. Tạo form đặt lịch khám với date, time, tel.
  2. Tạo form chọn sản phẩm có number số lượng và range mức độ ưu tiên.
  3. Tạo form nộp ảnh chỉ nhận JPG, PNG, cho chọn nhiều tệp.
  4. Mở form trên điện thoại, so sánh bàn phím của email, tel, url.
Tóm tắt bài học
  • type quyết định giao diện, bàn phím và kiểm tra.
  • Văn bản: text, password, email, tel, url, search.
  • Số và thời gian: number, range, date, time...
  • checkbox chọn nhiều, radio chọn một (cùng name).