1354 kata
7 menit

Membuat Form dengan HTML: Dari Input sampai Tombol Kirim

Di artikel sebelumnya, kita sudah mulai bisa membaca HTML.

Kita sudah tahu bahwa:

<p>Halo, Gabuters!</p>

merupakan sebuah elemen.

Kita juga sudah tidak terlalu asing ketika melihat atribut seperti:

<a href="https://www.bapakgabut.com">BapakGabut</a>

Kalau bagian itu masih terasa asing, Gabuters bisa mampir dulu ke artikel Mengenal Tag, Elemen, dan Atribut HTML.

Sekarang halaman kita sudah bisa menampilkan judul, paragraf, gambar, dan link.

Tapi semuanya masih berjalan satu arah.

Kita menampilkan sesuatu, pengunjung membacanya.

Bagaimana kalau kita ingin pengunjung ikut memberikan informasi?

Misalnya kita ingin meminta:

  • nama,
  • email,
  • pilihan,
  • komentar,
  • lalu menekan tombol kirim.

Kita membutuhkan sesuatu yang mungkin sudah Gabuters isi ratusan kali di internet.

Form.

Form Itu Buat Apa?#

Coba bayangkan kita ingin membuat halaman kontak sederhana.

Kita ingin pengunjung mengisi:

Nama : ____________
Email : ____________
Pesan :
____________________
____________________
[ Kirim ]

Kita tentu tidak bisa menggunakan <p> untuk semuanya.

<p>Nama</p>
<p>Email</p>
<p>Pesan</p>

Itu hanya menampilkan tulisan.

Pengunjung belum punya tempat untuk mengetik.

Di HTML, kita bisa menggunakan elemen <form> sebagai wadah untuk bagian halaman yang digunakan mengumpulkan input dari pengguna.

Contohnya:

<form>
...
</form>

Untuk sekarang memang belum terlihat menarik.

Karena <form> hanyalah wadahnya.

Kita masih perlu memasukkan tempat untuk mengetik di dalamnya.

Tempat Mengetik Pertama Kita: input#

Mari mulai dari sesuatu yang sederhana.

Kita ingin meminta nama pengunjung.

<form>
<input type="text">
</form>

Simpan lalu refresh browser.

Sekarang muncul sebuah kotak yang bisa kita isi.

Coba klik dan ketik nama Gabuters.

Selamat.

Untuk pertama kalinya halaman HTML kita tidak cuma menampilkan informasi.

Sekarang pengunjung bisa memasukkan sesuatu. 🎉

Perhatikan:

<input type="text">

Kita sudah pernah belajar atribut, jadi bagian ini seharusnya mulai terasa familiar.

input adalah elemennya.

Sedangkan:

type="text"

adalah atribut yang memberi tahu browser jenis input yang kita inginkan.

Dalam kasus ini:

text

berarti kita ingin pengguna memasukkan teks.

Tapi Kotak Ini Buat Apa?#

Sekarang bayangkan halaman kita punya dua input:

<form>
<input type="text">
<input type="text">
</form>

Kalau dibuka di browser, kita mendapatkan dua kotak.

Masalahnya…

Kotak pertama buat apa?

Kotak kedua buat apa?

Nama? Email? Alamat? Nama kucing?

Kita tahu karena kita yang membuatnya.

Pengunjung belum tentu tahu. 😄

Karena itu kita membutuhkan label.

<form>
<label>Nama</label>
<input type="text">
</form>

Sekarang pengunjung punya petunjuk bahwa input tersebut digunakan untuk mengisi nama.

Tapi kita bisa membuat hubungan antara label dan input menjadi lebih jelas bagi browser.

Caranya menggunakan atribut for dan id.

<form>
<label for="nama">Nama</label>
<input type="text" id="nama">
</form>

Perhatikan nilainya:

for="nama"
id="nama"

Keduanya sama.

Artinya label tersebut berhubungan dengan input yang memiliki id="nama".

Coba klik tulisan Nama di browser.

Browser akan memfokuskan input yang bersangkutan.

Hal kecil seperti ini membuat form lebih nyaman digunakan dan membantu aksesibilitas.

Sekarang Kita Tambahkan Email#

Nama sudah.

Sekarang kita ingin meminta email.

Kita sebenarnya bisa saja menulis:

<input type="text">

Tapi HTML menyediakan tipe input yang lebih sesuai:

<input type="email">

Jadi form kita bisa menjadi:

<form>
<label for="nama">Nama</label>
<input type="text" id="nama">
<label for="email">Email</label>
<input type="email" id="email">
</form>

Dengan type="email", kita memberi tahu browser bahwa nilai yang diharapkan adalah alamat email.

Pada kondisi tertentu browser juga bisa membantu melakukan validasi dasar terhadap format email.

Jadi atribut type bukan sekadar pajangan.

Ia membantu menjelaskan jenis data yang kita harapkan.

Beberapa Jenis input#

input tidak cuma digunakan untuk teks biasa.

Ada banyak nilai type yang tersedia.

Beberapa yang sering Gabuters temui misalnya:

<input type="text">
<input type="email">
<input type="password">
<input type="number">
<input type="date">
<input type="checkbox">
<input type="radio">

Masing-masing punya perilaku yang berbeda.

Tapi jangan buru-buru menghafalnya.

Kita akan menggunakan jenis input sesuai kebutuhan.

Kalau butuh nama, gunakan teks.

Kalau butuh email, gunakan email.

Kalau butuh tanggal, kita punya date.

HTML bukan ujian hafalan. 😄

Bagaimana Kalau Teksnya Panjang?#

input type="text" cocok untuk teks pendek seperti nama.

Tapi bagaimana kalau kita ingin meminta pesan seperti:

Halo BapakGabut, saya mau bertanya kenapa kode saya error padahal tadi malam masih jalan…

Pesannya bisa panjang.

Untuk itu kita punya <textarea>.

<label for="pesan">Pesan</label>
<textarea id="pesan"></textarea>

Berbeda dengan <input>, textarea memiliki tag pembuka dan penutup:

<textarea></textarea>

Sekarang pengguna punya area yang lebih nyaman untuk menulis teks panjang.

Kalau Pengguna Harus Memilih?#

Tidak semua informasi harus diketik sendiri.

Misalnya kita ingin bertanya:

Topik apa yang ingin ditanyakan?

Pilihan kita:

  • HTML
  • CSS
  • JavaScript

Kita bisa menggunakan <select>.

<label for="topik">Topik</label>
<select id="topik">
<option>HTML</option>
<option>CSS</option>
<option>JavaScript</option>
</select>

<select> membuat daftar pilihan.

Sedangkan setiap pilihan dibuat menggunakan:

<option>

Jadi strukturnya:

<select>
│
├── <option>HTML</option>
├── <option>CSS</option>
└── <option>JavaScript</option>

Nah, konsep nesting dari artikel sebelumnya mulai terpakai lagi.

Saatnya Membuat Tombol#

Form kita sudah punya:

  • nama,
  • email,
  • pesan,
  • pilihan topik.

Tapi masih ada yang kurang.

Pengunjung sudah capek-capek mengisi semuanya.

Lalu…

harus diapakan? 😄

Kita membutuhkan tombol.

<button type="submit">
Kirim
</button>

Kalau kita gabungkan:

<form>
<label for="nama">Nama</label>
<input type="text" id="nama">
<label for="email">Email</label>
<input type="email" id="email">
<label for="topik">Topik</label>
<select id="topik">
<option>HTML</option>
<option>CSS</option>
<option>JavaScript</option>
</select>
<label for="pesan">Pesan</label>
<textarea id="pesan"></textarea>
<button type="submit">
Kirim
</button>
</form>

Sekarang bentuk dasarnya sudah menyerupai sebuah form sungguhan.

Coba isi semua kolom lalu tekan Kirim.

Dan…

mungkin Gabuters mulai bertanya:

Datanya ke mana?

Nah.

Ini pertanyaan yang bagus.

Kita Belum Benar-Benar Mengirim Apa Pun#

Ini bagian penting.

Kita sudah membuat tampilan dan struktur form, tetapi itu belum otomatis berarti data tersimpan di suatu tempat.

HTML menyediakan mekanisme untuk menentukan ke mana dan bagaimana data form dikirim.

Misalnya kita akan sering menemukan atribut:

<form action="/kirim" method="post">

Secara sederhana:

action memberi tahu ke mana data form akan dikirim.

method memberi tahu bagaimana form mengirimkannya.

Tapi untuk benar-benar memproses data tersebut, biasanya kita membutuhkan sesuatu di sisi lain yang siap menerimanya.

Misalnya sebuah backend/server.

Dan itu belum perlu kita bahas sekarang.

Untuk sementara bayangkan seperti ini:

Pengguna
│
│ mengisi
▼
HTML Form
│
│ mengirim data
▼
???

Kita sudah membuat bagian HTML Form.

Bagian ??? akan kita kenal nanti ketika pembahasan kita sudah sampai ke cara aplikasi web bekerja dengan data.

Jadi kalau tombol Kirim kita sekarang belum menyimpan nama Gabuters ke database rahasia BapakGabut…

itu memang belum tugas HTML. 😄

Kalau Mau Dikirim, Input Perlu Punya Nama#

Ada satu atribut lagi yang penting ketika bekerja dengan form:

name

Misalnya:

<input
type="text"
id="nama"
name="nama"
>

Sekarang kita punya:

id="nama"
name="nama"

Kelihatannya mirip, tetapi kegunaannya berbeda.

id membantu mengidentifikasi elemen di halaman dan tadi kita gunakan untuk menghubungkannya dengan <label>.

Sedangkan name digunakan sebagai nama data ketika form dikirim.

Misalnya:

<input type="email" id="email" name="email">

Secara sederhana kita bisa membayangkan data yang nantinya dikirim seperti:

nama = BapakGabut
email = bapakgabut@example.com

Nama di sebelah kiri berasal dari atribut name.

Jadi kalau sebuah input nantinya ingin ikut dikirim sebagai data form, atribut name menjadi penting.

Placeholder Bukan Pengganti Label#

Gabuters mungkin pernah melihat:

<input
type="text"
placeholder="Masukkan nama"
>

placeholder menampilkan petunjuk di dalam input.

Kelihatannya praktis.

Tapi jangan buru-buru menghapus <label> lalu menggantinya dengan placeholder.

Contoh yang lebih baik:

<label for="nama">Nama</label>
<input
type="text"
id="nama"
name="nama"
placeholder="Contoh: Budi"
>

Label menjelaskan input ini apa.

Placeholder bisa membantu memberikan contoh atau petunjuk tambahan.

Begitu pengguna mulai mengetik, placeholder akan hilang.

Label tetap ada.

Jadi keduanya punya fungsi yang berbeda.

Kita Bisa Meminta Input Wajib Diisi#

Misalnya nama dan email tidak boleh kosong.

HTML punya atribut:

required

Contohnya:

<input
type="text"
id="nama"
name="nama"
required
>

Menariknya, required tidak perlu ditulis seperti:

required="true"

Cukup:

required

Ini disebut boolean attribute.

Keberadaan atribut tersebut sudah berarti fitur itu aktif.

Sekarang coba kosongkan input lalu tekan tombol submit.

Browser bisa membantu memberi validasi dasar sebelum form dikirim.

Tapi ingat: validasi HTML di browser bukan pengganti validasi di backend ketika nanti kita benar-benar memproses data.

Untuk sekarang cukup pahami bahwa HTML sudah menyediakan beberapa bantuan dasar untuk membuat form lebih nyaman digunakan.

Yuk, Buat Form Kontak Sederhana#

Sekarang kita gabungkan yang sudah dipelajari.

Di dalam <body>, coba buat:

<h1>Hubungi Saya</h1>
<p>
Punya pertanyaan? Isi form berikut.
</p>
<form>
<label for="nama">Nama</label>
<input
type="text"
id="nama"
name="nama"
placeholder="Masukkan nama"
required
>
<label for="email">Email</label>
<input
type="email"
id="email"
name="email"
placeholder="nama@email.com"
required
>
<label for="topik">Topik</label>
<select id="topik" name="topik">
<option value="html">HTML</option>
<option value="css">CSS</option>
<option value="javascript">JavaScript</option>
</select>
<label for="pesan">Pesan</label>
<textarea
id="pesan"
name="pesan"
placeholder="Tulis pesan di sini"
required
></textarea>
<button type="submit">
Kirim
</button>
</form>

Simpan lalu buka di browser.

Cobalah:

  • mengetik nama;
  • memasukkan email;
  • memilih topik;
  • menulis pesan;
  • mengosongkan field yang required;
  • kemudian menekan tombol Kirim.

Tidak masalah kalau tampilannya masih sangat sederhana.

Kita sedang belajar struktur dan perilakunya, bukan desainnya.

Nanti CSS yang bertugas membuatnya lebih enak dilihat.

Coba Modifikasi Sendiri#

Sekarang jangan berhenti di form yang saya buat.

Coba tambahkan field baru.

Misalnya:

<label for="umur">Umur</label>
<input type="number" id="umur" name="umur">

Atau tanggal:

<label for="tanggal">Tanggal</label>
<input type="date" id="tanggal" name="tanggal">

Gabuters juga bisa mengubah pilihan topiknya.

Misalnya:

<option value="game">Game</option>
<option value="manga">Manga</option>
<option value="lainnya">Gabut Lainnya</option>

Tidak perlu takut merusak halaman.

Kalau rusak, kita perbaiki.

Kalau masih rusak…

ya kita lihat lagi kodenya. 😄

Justru dari utak-atik seperti ini biasanya kita mulai benar-benar memahami HTML.

Apa yang Sudah Kita Pelajari?#

Sekarang halaman kita bukan hanya bisa menampilkan informasi.

Kita sudah bisa membuat tempat bagi pengguna untuk memberikan input.

Kita mengenal:

<form>
↓
wadah sebuah form
<input>
↓
input seperti teks, email, angka, tanggal, dan lainnya
<label>
↓
menjelaskan sebuah input
<textarea>
↓
input untuk teks yang lebih panjang
<select> + <option>
↓
memberikan daftar pilihan
<button>
↓
membuat tombol

Kita juga bertemu beberapa atribut penting:

type
id
for
name
placeholder
required

Dan yang tidak kalah penting, kita sekarang tahu bahwa:

HTML Form
↓
mengumpulkan data
↓
bukan berarti otomatis menyimpan data

Untuk benar-benar mengolah atau menyimpan data, kita membutuhkan bagian lain dari aplikasi web.

Tapi itu cerita untuk nanti.

Selanjutnya: Jangan Semua Dibungkus <div>#

Sekarang kita sudah punya cukup banyak elemen HTML.

Ada heading.

Ada paragraf.

Ada link.

Ada form.

Dan nanti halaman kita akan semakin besar.

Masalah berikutnya muncul ketika kita mulai ingin membagi halaman menjadi bagian-bagian seperti:

  • header,
  • navigasi,
  • konten utama,
  • artikel,
  • sidebar,
  • footer.

Kita memang bisa saja membungkus semuanya dengan <div>.

Tapi…

apakah sebaiknya begitu?

Di artikel berikutnya kita akan berkenalan dengan Semantic HTML dan melihat kenapa HTML bukan cuma soal membuat sesuatu tampil di browser, tetapi juga memberi arti pada struktur halaman.

HTML

Selesai

Bagian 3 dari 5Tulisan ini bagian dari seri

Bagikan Artikel

Buat poster berbagi atau salin tautan artikel ini.

Lanjut membaca

Bacaan terkait

Berdasarkan tag dan kategori yang sama

Coba jalur lain

Pilihan konsisten dari artikel lain