Form menggabungkan banyak komponen yang harus bekerja bersama: elemen form, kontrol dengan name, tombol dengan type yang tepat, validasi bawaan, dan pengodean data. Ketika satu komponen tidak bekerja, gejalanya hampir selalu samar: tombol terlihat normal tetapi tidak mengirim apa pun, atau data terkirim tetapi separuh isinya tidak sampai. Kita membutuhkan jalur diagnosis yang terurut, bukan menebak komponen mana yang bersalah.
Chapter ini memetakan empat gejala klasik beserta pemeriksaannya, lalu melihat data form langsung dari panel Network.
Empat Gejala, Empat Jalur #
- Submit tidak terjadi. Periksa tiga titik secara berurutan: apakah
buttonberada di dalam elemenform; apakahtype-nyasubmit(tomboltype="button"memang tidak mengirim); dan apakah validasi bawaan sedang memblokir — field bermasalah menampilkan ikon galat yang bisa dibaca pesannya saat kursor diarahkan; periksarequired,pattern, danmin/maxpada field tersebut. - Data tidak sampai. Penyebab paling umum: atribut
namehilang. Browser hanya mengumpulkan pasangannamedanvaluedari kontrol yang punyaname; sisanya tidak dikirim sama sekali. - Nilai yang dikirim salah. Bandingkan teks tampilan dengan
value:optiontanpa atributvaluemengirim teks yang tampil — label berformat seperti “Kopi susu — Rp18.000” sampai ke server apa adanya. - File tidak terkirim. Form yang memuat
input type="file"wajib memakaienctype="multipart/form-data"; tanpa itu, nama file terkirim tetapi isinya tidak.
Peran name layak diringkas dalam tabel karena menjadi sumber mayoritas laporan “data hilang”:
| Kontrol | name | Data yang terkirim |
|---|---|---|
| input email | name="surel" | [email protected] |
| select | name="ukuran" | ukuran=reguler |
| textarea | name="catatan" | catatan=tanpa gula |
input apa pun tanpa name | — | tidak terkirim sama sekali |
Melihat Payload di Panel Network #
Panel Network menunjukkan data form yang benar-benar keluar dari browser. Cara membacanya:
- Buka DevTools, pilih panel Network, lalu submit form.
- Cari baris permintaan yang baru muncul — namanya mengikuti nilai
action. - Klik baris tersebut, lalu buka tab Payload.
- Baca daftar pasangan
namedanvalueyang dikirim browser.
Tab Payload adalah kebenaran akhir: kita melihat data yang keluar, bukan data yang kita yakin dikirim. Field yang tidak tampil di daftar tersebut tidak pernah dikirim — masalahnya di markup, bukan di server.
Studi Kasus: Email yang Tidak Sampai #
Form langganan terkirim dan halaman sukses tampil, tetapi alamat email tidak pernah sampai. Markup kontrolnya:
<label for="surel">Alamat email</label>
<input type="email" id="surel">Tab Payload menampilkan pasangan dari kontrol lain — nama=budi — tanpa surel. Perbaikannya:
<label for="surel">Alamat email</label>
<input type="email" id="surel" name="surel">Mari kita telaah perbaikannya:
- Baris 2 (
id="surel"):idhanya menghubungkan label dan kontrol untuk manusia serta pembaca layar;idtidak berperan dalam pengiriman data. - Baris 2 (
name="surel"):namemenjadi kunci pasangan data — kini payload memuat[email protected].
Empat gejala di atas paling cepat dipahami dengan mengalaminya sendiri. Dua form berikut memuat kontrol email yang sama — Form A lupa label, name, dan required; Form B lengkap. Jalankan tiga uji secara berurutan: klik teks di atas masing-masing kotak dan lihat ke mana fokus jatuh; kirim kedua form dalam keadaan kosong; lalu isi alamat email dan kirim lagi:
Pada demo, pengiriman sungguhan ditahan skrip kecil dan pasangan name/value-nya ditampilkan sebagai teks pada output — kebenaran yang biasanya dibaca pada tab Payload. Perilaku label, required, dan name berasal murni dari markup form-nya.
Tiga gejala terjadi dalam satu demo. Pertama, klik teks “Alamat email”: hanya Form B yang memindahkan fokus ke kotaknya — teks di Form A bukan label, sehingga kliknya tidak sampai ke mana-mana. Kedua, kirim kosong: Form A meloloskan pengiriman tanpa pemeriksaan apa pun, sedangkan Form B ditahan validasi bawaan dan menampilkan gelembung galat pada kolomnya. Ketiga, isi email lalu kirim: Form A tetap tidak membawa data — input tanpa name tidak masuk payload, persis studi kasus di atas — sementara Form B mengirim surel=alamat@contoh.
Checklist Form #
Delapan pemeriksaan untuk setiap form sebelum dianggap selesai:
- Setiap kontrol punya label yang terhubung (
fordanidberpasangan). - Setiap
input,select, dantextareapunyaname. - Setiap
buttonpunyatypeeksplisit. formmemuatactiondanmethodyang jelas.- Form unggahan file memakai
enctype="multipart/form-data". - Tombol Tab menjangkau semua kontrol dengan urutan yang masuk akal.
- Field bergalat menampilkan pesan yang bisa dibaca (arahkan kursor ke ikon galat).
- Payload diperiksa di panel Network sebelum menyimpulkan server bermasalah.
Gejala form paling sering selesai di name dan payload. Dua keluhan visual paling umum — gambar yang tidak muncul dan link yang tidak membawa ke mana-mana — punya jalur diagnosis sendiri di chapter berikutnya.