Atribut novalidate
Nonaktifkan validasi peramban saat Anda menanganinya sendiri.
Atribut novalidate adalah pelajaran HTML Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar HTML Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus HTML Academy mencakup 4 pelajaran total.
Keterbatasan Validasi Peramban
Validasi bawaan HTML5 memiliki keterbatasan:
- Pesan kesalahan bergantung pada peramban dan sulit ditata
- Validasi hanya berjalan saat pengiriman, bukan saat blur atau input
- Aturan bisnis yang kompleks (pencocokan kata sandi, username unik) tidak dapat diterapkan
Saat membutuhkan kendali penuh, nonaktifkan validasi bawaan dengan novalidate.
novalidate pada formulir
Menambahkan novalidate ke formulir akan menonaktifkan semua validasi peramban:
<form action="/register" method="post" novalidate>
<!-- Browser will NOT validate these on submit -->
<input type="email" name="email" required>
<input type="password" name="password" minlength="8" required>
<button type="submit">Register</button>
</form>Mengapa Menggunakan novalidate?
Alasan umum untuk menonaktifkan validasi peramban:
- Penataan gaya pesan kesalahan kustom yang sesuai dengan sistem desain Anda
- Validasi waktu nyata (saat blur atau input, bukan hanya saat pengiriman)
- Validasi beberapa bidang (misalnya konfirmasi kata sandi)
- Menampilkan kesalahan dari sisi server setelah pengalihan
- Pustaka validasi pihak ketiga (Zod, Yup, React Hook Form)
Pola Validasi Kustom
Bangun validasi kustom dengan novalidate:
<form id="form" novalidate>
<label for="email">Email</label>
<input type="email" id="email" name="email" required>
<span class="error" id="email-error" role="alert" hidden></span>
<button type="submit">Submit</button>
</form>
<script>
document.getElementById('form').addEventListener('submit', (e) => {
e.preventDefault();
const email = document.getElementById('email');
const error = document.getElementById('email-error');
if (!email.value || !email.value.includes('@')) {
error.textContent = 'Please enter a valid email address.';
error.hidden = false;
email.focus();
} else {
error.hidden = true;
// Submit...
}
});
</script>formnovalidate pada Tombol
Nonaktifkan validasi untuk tombol pengiriman tertentu tanpa menggunakan novalidate pada seluruh formulir:
<form action="/save" method="post">
<input type="email" name="email" required>
<!-- Save as draft: skip validation -->
<button type="submit" formaction="/save-draft" formnovalidate>
Save Draft
</button>
<!-- Final submit: normal validation -->
<button type="submit">Submit</button>
</form>Menata Gaya Kesalahan Kustom
Penataan gaya kesalahan validasi kustom:
.field-error {
color: #ef4444;
font-size: 0.875rem;
margin-top: 0.25rem;
display: flex;
align-items: center;
gap: 0.25rem;
}
input.invalid {
border-color: #ef4444;
box-shadow: 0 0 0 3px rgba(239, 68, 68, 0.15);
}
input.valid {
border-color: #22c55e;
}Kesalahan Kustom yang Aksesibel
Buat pesan kesalahan kustom agar dapat diakses:
<label for="email">Email</label>
<input
type="email"
id="email"
name="email"
aria-describedby="email-error"
aria-invalid="false"
>
<span id="email-error" role="alert"></span>
<!-- aria-invalid="true" when invalid -->
<!-- role="alert" announces changes to screen readers -->
<!-- aria-describedby links the input to its error message -->Strategi Waktu Validasi
Kapan harus melakukan validasi dengan novalidate:
- Saat pengiriman — paling sederhana; validasikan semuanya sekaligus
- Saat blur — validasikan setiap bidang ketika pengguna meninggalkannya
- Saat input — waktu nyata; UX terbaik, tetapi bisa terasa terlalu agresif
- Hibrida — validasikan saat blur; hapus kesalahan saat input
Pola Hibrida Blur + Input
Pendekatan validasi yang paling ramah pengguna:
function validateEmail(input, errorEl) {
const val = input.value.trim();
if (!val) {
showError(input, errorEl, 'Email is required.');
} else if (!/^[^@]+@[^@]+\.[^@]+$/.test(val)) {
showError(input, errorEl, 'Enter a valid email address.');
} else {
clearError(input, errorEl);
}
}
input.addEventListener('blur', () => validateEmail(input, errorEl));
input.addEventListener('input', () => {
// Only clear the error while typing, don't re-validate until blur
if (input.classList.contains('invalid')) validateEmail(input, errorEl);
});novalidate dan Validasi Sisi Server
Selalu lakukan validasi dari sisi server juga:
- Validasi sisi klien ditujukan untuk pengalaman pengguna
- Validasi sisi server ditujukan untuk keamanan
- Pengguna dapat melewati validasi HTML dengan mengubah permintaan
- Validasi kustom dengan novalidate + JS harus mencerminkan aturan server
Pustaka Validasi
Pustaka validasi JavaScript populer yang dapat dipasangkan dengan novalidate:
- Zod — validasi skema yang mengutamakan TypeScript
- Yup — validasi skema objek
- Valibot — pustaka skema yang ringan
- React Hook Form — status formulir + validasi untuk React
Menguji Validasi Kustom
Cara menguji validasi formulir kustom:
- Uji pengiriman kosong (bidang wajib)
- Uji format yang tidak valid (email yang salah, pola nomor telepon)
- Uji kasus tepi (hanya spasi, Unicode, teks yang sangat panjang)
- Uji dengan pembaca layar untuk memverifikasi pengumuman kesalahan
- Uji navigasi papan ketik antarb idang setelah kesalahan ditampilkan
Pemeriksaan Cepat
Apa yang dilakukan formnovalidate pada tombol?
Ringkasan: novalidate
Hal-hal penting tentang novalidate:
novalidatepada formulir — menonaktifkan semua validasi perambanformnovalidatepada tombol — menonaktifkan validasi hanya untuk pengiriman tersebut- Gunakan validasi kustom untuk mengendalikan UX dan menerapkan aturan yang kompleks
- Selalu lakukan validasi dari sisi server — validasi klien dapat dilewati
- Umumkan kesalahan secara aksesibel dengan
role="alert"danaria-invalid
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Atribut novalidate” gratis?
Ya — teks lengkap “Atribut novalidate” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus HTML Academy, upgrade ke CoddyKit PRO. Kursus HTML Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Atribut novalidate”?
Nonaktifkan validasi peramban saat Anda menanganinya sendiri. Kamu berlatih HTML Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai HTML Academy?
Tidak diperlukan pengalaman sebelumnya. HTML Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Atribut novalidate” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran HTML Academy ini?
Ya. Setiap pelajaran HTML Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- required pattern min max dan maxlength
- Atribut novalidate
- Dasar-Dasar Constraint Validation API
- Perbandingan Validasi HTML5 dan JavaScript