HTML · Bab 6
Validasi Form dan Aksesibilitas
Memakai validasi bawaan browser seperti required, min, max, minlength, dan pattern, mengelompokkan isian dengan fieldset dan legend, mengisi autocomplete, serta membedakan placeholder dari label.
Form yang baik menolak isian yang jelas salah sebelum dikirim dan mudah dipakai siapa pun, termasuk pengguna keyboard dan pembaca layar. HTML menyediakan validasi bawaan tanpa satu baris JavaScript pun.
6.1 Validasi Bawaan Browser
Bila form punya aturan validasi, browser memeriksa isian saat tombol submit ditekan. Bila ada yang tidak memenuhi aturan, form tidak dikirim, dan browser menampilkan pesan di isian pertama yang salah.
Validasi di browser bukan pengaman. Pengguna bisa melewatinya, misalnya dengan mengubah HTML lewat DevTools atau mengirim permintaan langsung tanpa form. Data tetap wajib diperiksa ulang di server, seperti $request->validate di topik Laravel. Validasi di browser berguna untuk kenyamanan: kesalahan terlihat seketika.
Playground situs ini tidak mengirim form. Karena itu contoh di bab ini memakai tombol “Periksa isian” dengan sedikit JavaScript yang memanggil reportValidity(): browser memeriksa aturan dan menampilkan pesannya, sama seperti saat submit. Ada juga checkValidity(), yang memeriksa tanpa menampilkan pesan dan hanya mengembalikan true atau false. JavaScript sendiri dipelajari di topik JavaScript.
6.2 required, minlength, dan maxlength
required: isian wajib diisi.minlengthdanmaxlength: batas jumlah karakter teks. Browser mencegah pengetikan melebihimaxlength.minlengthdiperiksa setelah pengguna mengetik.type="email"sudah memeriksa format email dengan sendirinya.
🧪 Coba ubah: klik “Periksa isian” saat kosong, lalu isi nama dengan dua huruf dan email tanpa tanda @, dan periksa lagi.
Belum ada output.
6.3 min, max, dan pattern
mindanmaxmembatasi nilainumberdandate.stepmengatur kelipatannya. Tanggalmindi contoh berikut hanya contoh; di form sungguhan biasanya diisi tanggal hari ini.patternberisi pola (regular expression) yang harus cocok dengan seluruh isian. Isian kosong dianggap lolospattern, kecuali isian itu jugarequired.titlemenjelaskan format yang diminta. Sebagian browser menampilkannya di pesan galat.type="tel"tidak memeriksa format nomor; ia hanya menampilkan keyboard angka di ponsel. Format nomor diperiksa denganpattern.
🧪 Coba ubah: isi jumlah dengan 12, lalu dengan 5. Isi nomor HP dengan 08123 lalu periksa.
Belum ada output.
6.4 Mengelompokkan Isian dengan <fieldset> dan <legend>
<fieldset> mengelompokkan isian yang berkaitan, dan <legend> menjadi judul kelompok itu. Pembaca layar membacakan legend saat pengguna masuk ke kelompok tersebut. Pola ini sangat dianjurkan untuk kelompok radio, karena satu pertanyaan (“Cara terima pesanan”) punya beberapa label jawaban.
Belum ada output.
Satu atribut required pada salah satu radio sudah membuat seluruh kelompok dengan name yang sama wajib dipilih.
6.5 autocomplete
Atribut autocomplete memberi tahu browser jenis data sebuah isian, sehingga browser bisa menawarkan isian otomatis yang tersimpan. Ini mempercepat pengisian dan sangat membantu pengguna yang sulit mengetik. Nilai yang umum: name, email, tel, street-address, postal-code, username, current-password, dan new-password. Nilai off meminta browser tidak mengisi otomatis, tetapi tidak selalu dipatuhi browser.
<label for="sandi-baru">Kata sandi baru</label>
<input type="password" id="sandi-baru" name="sandi" autocomplete="new-password" minlength="8" required>
6.6 placeholder Bukan Pengganti label
placeholder adalah teks samar di dalam kotak isian. Teks ini hilang begitu pengguna mengetik, warnanya sering pucat dan sulit dibaca, dan tidak selalu dibacakan sebagai nama isian. Pakai placeholder hanya untuk contoh format, dan tetap sediakan label.
Belum ada output.
6.7 Ringkasan
required,minlength,maxlength,min,max, danpatternadalah validasi bawaan browser. Server tetap wajib memeriksa ulang.checkValidity()danreportValidity()adalah cara JavaScript meminta browser memeriksa form.<fieldset>dan<legend>mengelompokkan isian, terutama kelompok radio.autocompletemempercepat pengisian.placeholderhanya contoh format, bukan penggantilabel.