Menu

Các kiểu input trong HTML: đủ 22 type của thẻ input

Mọi type của thẻ <input> trong HTML ở cùng một chỗ: text, email, password, number, range, date và time, color, file, hidden và các type còn lại, kèm những gì mỗi type kiểm tra, bàn phím mà nó mở trên điện thoại và các thuộc tính dùng chung.

Trang này có trình soạn thảo chạy trực tiếp. Sửa, chạy và xem đầu ra ngay lập tức.

Thẻ input và các type của nó

<input> là một trường của form, và thuộc tính (attribute) type quyết định nó là loại trường nào. Cùng một thẻ có thể tạo ô văn bản, thanh trượt, bộ chọn ngày hay bộ chọn màu. Thử từng trường bên dưới rồi nhấn Submit để xem form gửi đi những gì:

<input> là phần tử rỗng nên không có thẻ đóng. name là khóa mà giá trị được gửi kèm, còn value là giá trị ban đầu. Thiếu type hoặc viết sai sẽ cho ra một ô văn bản bình thường.

Tất cả các kiểu input trong HTML

typeLà gìGhi chú
textMột dòng văn bảnMặc định
passwordVăn bản hiển thị thành dấu chấmBản thân nó không mã hóa; hãy gửi qua HTTPS
emailMột địa chỉ emailKiểm tra định dạng; có phím @ trên bàn phím điện thoại
urlMột địa chỉ webPhải bắt đầu bằng scheme như https://
telMột số điện thoạiBàn phím số trên di động, không kiểm tra định dạng
searchMột ô tìm kiếmThường có nút xóa nội dung
numberMột con sốNút tăng giảm, min, max, step
rangeMột thanh trượtCố ý không chính xác; giá trị là một số
dateMột ngàyGiá trị là YYYY-MM-DD
timeMột giờ trong ngàyGiá trị là HH:MM (24 giờ)
datetime-localNgày và giờ, không có múi giờGiá trị là YYYY-MM-DDTHH:MM
monthMột năm và thángKhông phải trình duyệt nào cũng hỗ trợ
weekMột năm và số tuầnKhông phải trình duyệt nào cũng hỗ trợ
colorMột bộ chọn màuGiá trị là #rrggbb viết thường
checkboxMột ô bật/tắtXem checkbox trong HTML
radioChọn một trong một nhómXem radio button trong HTML
fileMột bộ chọn tệpaccept, multiple
hiddenMột giá trị được gửi nhưng không hiển thịCho ID và token
submitMột nút gửi form<button type="submit"> linh hoạt hơn
resetMột nút đặt lạiHiếm khi là ý hay
buttonMột nút tự nó không làm gìDùng với JavaScript
imageMột nút gửi được vẽ bằng ảnhGửi kèm cả tọa độ cú nhấp

Các type văn bản và bàn phím điện thoại

email, url, tel, search và text trên máy tính đều trông như một ô văn bản. Khác biệt nằm ở cách kiểm tra hợp lệ và, trên điện thoại, ở bàn phím được mở ra. Trong ví dụ này, viền ô chuyển xanh hoặc đỏ tùy theo đánh giá của trình duyệt về giá trị:

  • Với trình duyệt, ada@example là email hợp lệ: nó chỉ kiểm tra có văn bản, có @ và có tên miền, chứ không kiểm tra tên miền có dấu chấm hay không. Việc kiểm tra thật sự diễn ra trên máy chủ.
  • example.com không phải url hợp lệ vì thiếu scheme. https://example.com thì hợp lệ.
  • tel chấp nhận mọi thứ. Định dạng số điện thoại giữa các nước quá khác nhau nên không có kiểm tra sẵn; thêm pattern nếu bạn cần.
  • inputmode="numeric" yêu cầu điện thoại mở bàn phím số mà không gặp các vấn đề của type="number", nên đây là lựa chọn đúng cho mã bưu chính, mã dùng một lần và số thẻ.

number và range

Cả hai đều nhận min, max và step. number dành cho giá trị chính xác; range là thanh trượt cho những giá trị mà con số cụ thể không quá quan trọng. Thanh trượt range không hiển thị số, nên hãy đi kèm một thẻ <output>:

Với number, step mặc định là 1, nên một trường giá tiền không có step="0.01" sẽ từ chối 4.99 khi gửi form. Trong JavaScript, input.value luôn là chuỗi; dùng input.valueAsNumber để lấy một số.

Ngày và giờ

Các type ngày và giờ mở bộ chọn riêng của trình duyệt. Người đọc thấy định dạng theo khu vực của họ (09/24/2026, 24.09.2026), nhưng giá trị luôn có cùng một định dạng cố định:

Định dạng cố định đó là thứ máy chủ nhận được và JavaScript đọc được, nên bạn không bao giờ phải phân tích "24.09.2026". min và max cũng dùng định dạng này. datetime-local không có múi giờ: nếu múi giờ quan trọng, hãy chuyển đổi trên máy chủ theo múi giờ của người đọc.

color và file

accept="image/*" giới hạn bộ chọn tệp chỉ hiện ảnh (và cho phép dùng camera trên điện thoại); nó cũng nhận phần mở rộng, như accept=".pdf,.docx". Đây chỉ là gợi ý cho bộ chọn, nên hãy kiểm tra loại tệp trên máy chủ. multiple cho phép chọn nhiều tệp. Một lần tải lên thật sự còn cần method="post" và enctype="multipart/form-data" trên form.

Gợi ý với datalist

Thẻ <datalist> cung cấp cho ô văn bản một danh sách gợi ý mà vẫn cho phép nhập bất kỳ giá trị nào. Nối chúng với nhau bằng thuộc tính list:

Gõ "ja" vào ô để xem các gợi ý khớp. Khác với select, người đọc có thể gõ một giá trị không có trong danh sách.

Các thuộc tính dùng được trên input

Thuộc tínhTác dụng
nameKhóa mà giá trị được gửi kèm
valueGiá trị ban đầu
placeholderGợi ý hiển thị khi ô còn trống (không phải nhãn)
requiredPhải điền trước khi gửi
disabledKhông dùng được và không được gửi
readonlyKhông sửa được nhưng vẫn được gửi
autocompleteTự động điền gì: email, name, current-password, one-time-code, off
min, max, stepGiới hạn cho number, range, ngày và giờ
minlength, maxlengthGiới hạn độ dài cho các type văn bản
patternBiểu thức chính quy mà toàn bộ giá trị phải khớp
inputmodeBàn phím điện thoại nào được hiện: numeric, decimal, email, tel, url
listid của một thẻ <datalist>
multipleNhiều giá trị, cho email và file
acceptLoại tệp cho file

Lỗi thường gặp

  • Dùng type="number" cho số điện thoại, mã bưu chính hay số thẻ. Chúng không phải số lượng. Dùng tel hoặc text kèm inputmode="numeric".
  • Trường giá tiền không có step="0.01". Giá trị thập phân sẽ không qua được kiểm tra.
  • Dùng placeholder làm nhãn. Nó biến mất ngay khi người đọc bắt đầu gõ.
  • Dựa vào accept hoặc type="email" để bảo mật. Chúng chỉ giúp tiện hơn; máy chủ vẫn phải kiểm tra lại.
  • Dùng type="month" hoặc type="week" mà không có phương án dự phòng. Một số trình duyệt chỉ hiện ô văn bản thường.
  • Viết thẻ đóng </input>. <input> là phần tử rỗng.

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

HTML có bao nhiêu kiểu input?

22: button, checkbox, color, date, datetime-local, email, file, hidden, image, month, number, password, radio, range, reset, search, submit, tel, text, time, url và week. Một type không hợp lệ hoặc bị bỏ trống sẽ hoạt động như text.

Kiểu input mặc định trong HTML là gì?

text. Một thẻ <input> không có type, hoặc có type mà trình duyệt không biết, là một ô nhập văn bản một dòng.

Có nên dùng type="number" cho số điện thoại hay mã bưu chính không?

Không. number dành cho số lượng: nó thêm nút tăng giảm và từ chối dấu +, khoảng trắng và dấu gạch nối vốn có trong số điện thoại. Dùng type="tel" cho số điện thoại, và type="text" kèm inputmode="numeric" cho các mã như mã bưu chính hay số thẻ.

Input type date dùng định dạng nào?

Giá trị luôn là YYYY-MM-DD, chẳng hạn 2026-09-24, bất kể người đọc thấy định dạng nào trên màn hình. Phần hiển thị theo ngôn ngữ và khu vực của người đọc; giá trị được gửi đi và đọc bằng script thì không.

Thẻ input có cần thẻ đóng không?

Không. <input> là phần tử rỗng (void element): viết <input type="text" name="city">. Thẻ đóng </input> là không hợp lệ, còn dấu gạch chéo tự đóng trong <input /> được phép nhưng không có tác dụng gì.

Hình minh họa các ngôn ngữ lập trình của Coddy

Học lập trình cùng Coddy

Bắt đầu