- Bab 3 dari 10
- 30 menit
- 1 latihan kode
- 4 soal kuis
Form dan Input HTML5
Di bab ini (9 bagian)
Tujuan bab ini
- Membuat form dengan
<form>,<label>, dan pasanganfor/idyang benar. - Memakai tipe input HTML5:
email,number,date,range,color,tel,url, dansearch. - Menambahkan atribut validasi:
required,min/max,pattern, serta atribut bantuanplaceholderdanautocomplete. - Memakai
<select>,<textarea>, dan<button type>, lalu memahami validasi bawaan browser.
Form: jalur data dari pengguna
Hampir setiap aplikasi web punya form: daftar akun, login, checkout, kolom komentar, sampai pencarian. Elemen <form> membungkus semua kolom isian dan menentukan ke mana datanya dikirim.
Hasilnya: teks "Nama lengkap", sebuah kotak isian, dan tombol "Daftar". Kalau kotak dibiarkan kosong lalu tombol diklik, browser menahan pengiriman dan menampilkan pesan seperti "Please fill out this field".
Dua atribut penting di <form>:
action: alamat tujuan data. Kalau dikosongkan, data dikirim ke halaman yang sama.method:getmenaruh data di URL (cocok untuk pencarian),postmengirimnya di badan request (cocok untuk data pribadi seperti password).
Di setiap input, atribut name adalah nama data saat dikirim. Input tanpa name tidak ikut terkirim, walaupun sudah diisi.
Label: kecil tapi wajib
<label> adalah teks keterangan untuk sebuah input. Hubungkan keduanya dengan for di label yang nilainya sama dengan id di input.
Manfaatnya:
- Screen reader membacakan "Nama lengkap, edit text" saat input difokus. Tanpa label, pengguna tunanetra tidak tahu kolom itu untuk apa.
- Mengklik teks label ikut memfokuskan input. Untuk checkbox kecil di HP, area klik jadi jauh lebih besar.
Cara lain adalah membungkus input di dalam label: <label>Setuju <input type="checkbox" name="setuju"></label>. Keduanya sah, tapi pasangan for/id lebih umum.
placeholder bukan pengganti label. Placeholder hilang begitu pengguna mulai mengetik, warnanya pucat, dan tidak selalu dibacakan screen reader. Pakai placeholder hanya untuk contoh format, misalnya placeholder="nama@email.com".
Tipe input HTML5
Dulu hampir semua kolom memakai type="text". HTML5 menambahkan tipe khusus yang memberi validasi dan tampilan yang pas:
| Tipe | Kegunaan | Bonus dari browser |
|---|---|---|
email | Alamat email | Cek ada @, keyboard HP menampilkan tombol @ |
number | Angka | Tombol naik turun, menolak huruf |
date | Tanggal | Date picker bawaan |
range | Nilai dalam rentang | Slider |
color | Warna | Color picker, nilainya hex seperti #4caf50 |
tel | Nomor telepon | Keyboard angka di HP (tanpa validasi format) |
url | Alamat web | Cek format, wajib ada skema seperti https:// |
search | Kolom pencarian | Tombol kecil untuk mengosongkan isi di beberapa browser |
Kalau browser tidak mengenal suatu tipe, ia akan memperlakukannya sebagai text. Jadi memakai tipe baru itu aman.
Input umur menolak nilai di bawah 13 atau di atas 100. Slider volume dimulai dari tengah karena value="5".
Atribut validasi dan bantuan
required: kolom wajib diisi.min,max,step: batas dan kelipatan untuknumber,range, dandate.minlength,maxlength: batas jumlah karakter teks.pattern: aturan berupa regular expression. Contohpattern="[0-9]{5}"artinya tepat lima digit, misalnya kode pos. Pola selalu dicocokkan dengan seluruh isi, bukan sebagian.autocomplete: memberi petunjuk ke browser untuk mengisi otomatis, misalnyaautocomplete="email","name", atau"new-password". Pengguna jadi tidak perlu mengetik ulang.autofocus: fokus otomatis saat halaman dimuat. Pakai seperlunya, satu per halaman.
Saran isian dengan datalist
<datalist> memberi daftar saran untuk sebuah input, tapi pengguna tetap boleh mengetik nilai lain. Hubungkan lewat atribut list di input yang nilainya sama dengan id datalist.
Saat pengguna mengetik "Ba", browser menampilkan saran "Bandung" di bawah kolom. Bedanya dengan <select>: select membatasi pilihan, datalist hanya menyarankan.
Validasi bawaan browser
Saat form dikirim, browser memeriksa setiap kolom berdasarkan tipe dan atributnya. Kalau ada yang tidak valid, pengiriman dibatalkan, kolom pertama yang salah difokuskan, dan muncul pesan bawaan.
Status valid juga bisa dipakai di CSS dan JavaScript:
Dengan aturan ini, kolom email berbingkai merah selama isinya belum berformat email, lalu berubah hijau setelah benar. Di JavaScript, form.checkValidity() mengembalikan true atau false.
Satu catatan penting: validasi browser hanya untuk kenyamanan pengguna. Siapa pun bisa mematikannya lewat DevTools atau mengirim request langsung. Server tetap wajib memvalidasi ulang semua data.
Kesalahan umum
fordi label tidak sama persis denganidinput, misalnya beda huruf besar kecil. Label jadi tidak terhubung.- Lupa atribut
name, sehingga data kolom itu tidak ikut terkirim. - Placeholder dipakai sebagai label.
- Memakai
type="number"untuk nomor HP. Angka nol di depan bisa hilang dan muncul tombol naik turun yang aneh. Pakaitype="tel". - Tombol biasa di dalam form tanpa
type="button", akhirnya form terkirim saat tombol diklik. - Mengandalkan validasi browser saja tanpa validasi di server.
Rangkuman
<form>membungkus kolom isian,actiondanmethodmenentukan tujuan dan cara kirim,namemenentukan nama data.- Setiap input butuh
<label>yang terhubung lewatfor/id. - Tipe input HTML5 seperti
email,number,date,range,color,tel,url, dansearchmemberi validasi dan keyboard yang pas. required,min/max,pattern, dan kawan-kawan mengaktifkan validasi bawaan, tapi server tetap harus memeriksa ulang.<button>di dalam form defaultnya submit, jadi tulistypesecara eksplisit.
Slide 7 sampai 7 dari deck HTML5 dan CSS3. Penjelasan lengkapnya ada di mode Baca.

Selesaikan bab ini
- 1. Baca materi
- 2. Latihan kode (1)
- 3. Kuis (4 soal)
Latihan kode: Form pendaftaran kelas
Lengkapi form pendaftaran ini dengan fitur HTML5:
- Ganti teks
<p>Email</p>dengan<label for="email">, lalu jadikan input#emailbertipeemail,required, danautocomplete="email". - Input
#umurbertipenumberdenganmin="13"danmax="100". - Dropdown
#kelaswajib dipilih (required). - Tombol Batal diberi
type="button"dan tombol Daftar diberitype="submit".
Form yang masih kosong harus ditolak validasi browser, dan form yang terisi benar harus lolos.
Cek pemahaman
1Tipe input apa yang paling tepat untuk nomor HP?
2`<button>` di dalam `<form>` tanpa atribut `type` akan mengirim form saat diklik.
3Tanpa diubah pengguna, ada berapa input yang dianggap tidak valid oleh browser?
<form> <input name="umur" type="number" min="13" max="100" value="12"> <input name="email" type="email" value="sasa@contoh"> <input name="kota" required value="Bandung"> </form>4Kenapa `placeholder` tidak boleh menggantikan `<label>`?