Form Multi-Langkah (Wizard)
Membangun form pendaftaran bertahap dengan progress bar dan validasi per langkah.
Kenapa Form Dipecah?
Form panjang (pendaftaran, checkout) menakutkan pengguna. Memecahnya menjadi 3-4 langkah kecil dengan progress bar meningkatkan penyelesaian hingga 2x lipat. Ini pola standar di e-commerce dan aplikasi perbankan.
Langkah Membangun
HTML: Satu <form> berisi 3 <div class="langkah">: (1) Data diri, (2) Akun, (3) Konfirmasi. Hanya langkah aktif yang tampil. Progress bar di atas menunjukkan langkah 1/2/3.
CSS: Langkah disembunyikan dengan display: none, yang aktif tampil dengan animasi slide. Progress bar: lingkaran bernomor yang terisi saat langkah selesai, dihubungkan garis.
JS: State langkahAktif (0, 1, 2). Fungsi tampilLangkah(n):
- Sembunyikan semua, tampilkan yang ke-n.
- Update progress bar.
- Tombol "Kembali" disembunyikan di langkah pertama, tombol "Kirim" hanya muncul di langkah terakhir.
Validasi per langkah: sebelum lanjut, cek input di langkah saat ini. Kalau ada yang kosong/salah, tampilkan error dan jangan pindah. Data semua langkah dikumpulkan di satu object dataForm.
Kesalahan Umum
- Data hilang saat pindah langkah (simpan ke object, jangan andalkan DOM).
- Bisa klik "Lanjut" meski validasi gagal (return early jika tidak valid).
- Progress bar tidak sinkron dengan langkah aktual (selalu update keduanya di satu fungsi).
export default function App(): JSX.Element { return <h1>Hello world</h1> }
Tantangan
Tantangan: Simpan Draft Otomatis
Simpan dataForm ke localStorage setiap kali langkah berubah, dan saat halaman dibuka kembali, tawarkan "Lanjutkan dari draft?" yang mengisi ulang form.