Accessibility - Forms
Form adalah interaksi paling umum di web. Form yang tidak accessible menyulitkan banyak pengguna.
Label yang Terhubung
Setiap input harus punya label yang terhubung secara eksplisit:
<!-- Benar — label punya for yang cocok dengan id input -->
<label for="email">Email</label>
<input id="email" type="email" />
<!-- Juga benar — input di dalam label -->
<label>
Email
<input type="email" />
</label>
<!-- Salah — label tidak terhubung -->
<label>Email</label>
<input type="email" />Fieldset dan Legend
Untuk grup input terkait:
<fieldset>
<legend>Metode Pembayaran</legend>
<label>
<input type="radio" name="pembayaran" value="kartu" />
Kartu Kredit
</label>
<label>
<input type="radio" name="pembayaran" value="transfer" />
Transfer Bank
</label>
</fieldset>Error Message
Error harus dihubungkan dengan input menggunakan aria-describedby:
<label for="email">Email</label>
<input
id="email"
type="email"
aria-required="true"
aria-invalid="true"
aria-describedby="email-error"
/>
<span id="email-error" role="alert">
Format email tidak valid
</span>Required Fields
<!-- Gunakan required attribute dan aria-required -->
<label for="nama">Nama <span aria-label="required">*</span></label>
<input id="nama" required aria-required="true" />Input Types yang Tepat
<!-- Gunakan type yang sesuai untuk mobile keyboard yang benar -->
<input type="email" /> <!-- @ dan .com muncul -->
<input type="tel" /> <!-- numeric keypad -->
<input type="number" /> <!-- numeric dengan spinner -->
<input type="date" /> <!-- date picker native -->
<input type="search" /> <!-- clear button -->Placeholder Bukan Label
<!-- Salah — placeholder hilang saat user mengetik -->
<input placeholder="Masukkan email Anda" />
<!-- Benar -->
<label for="email">Email</label>
<input id="email" placeholder="nama@perusahaan.com" />Success State
<input
aria-invalid="false"
aria-describedby="email-success"
/>
<span id="email-success" role="status">
Email tersedia
</span>Checkbox dan Toggle
<!-- Gunakan switch role untuk toggle -->
<button
role="switch"
aria-checked="false"
aria-label="Notifikasi email"
>
<span aria-hidden="true">OFF</span>
<span aria-hidden="true">ON</span>
</button>