TL; DR: Tidak peduli dengan browser lama? Gunakan form.reportValidity()
.
Butuh dukungan browser lama? Lanjutkan membaca.
Ini sebenarnya adalah mungkin untuk memicu validasi secara manual.
Saya akan menggunakan JavaScript biasa dalam jawaban saya untuk meningkatkan kegunaan kembali, tidak diperlukan jQuery.
Asumsikan bentuk HTML berikut:
<form>
<input required>
<button type="button">Trigger validation</button>
</form>
Dan mari ambil elemen UI kita di JavaScript:
var form = document.querySelector('form')
var triggerButton = document.querySelector('button')
Tidak memerlukan dukungan untuk browser lama seperti Internet Explorer? Ini adalah untuk Anda.
Semua browser modern mendukung para reportValidity()
metode pada form
elemen.
triggerButton.onclick = function () {
form.reportValidity()
}
Itu dia, kita sudah selesai. Juga, inilah CodePen sederhana yang menggunakan pendekatan ini.
Pendekatan untuk browser lama
Di bawah ini adalah penjelasan rinci bagaimana reportValidity()
bisa ditiru di browser lama.
Namun, Anda tidak perlu menyalin & menempelkan blok kode itu sendiri ke dalam proyek Anda - ada ponyfill / polyfill yang tersedia untuk Anda.
Jika reportValidity()
tidak didukung, kita perlu sedikit menipu browser. Jadi apa yang akan kita lakukan?
- Periksa validitas formulir dengan menelepon
form.checkValidity()
. Ini akan memberi tahu kami jika formulir tersebut valid, tetapi tidak menampilkan UI validasi.
- Jika formulir tidak valid, kami membuat tombol kirim sementara dan memicu klik di atasnya. Karena formulir tidak valid, kami tahu itu tidak akan benar - benar dikirim, namun, itu akan menunjukkan petunjuk validasi kepada pengguna. Kami akan segera menghapus tombol kirim sementara, sehingga tidak akan pernah terlihat oleh pengguna.
- Jika formulirnya valid, kami tidak perlu mengganggu sama sekali dan membiarkan pengguna melanjutkan.
Dalam kode:
triggerButton.onclick = function () {
// Form is invalid!
if (!form.checkValidity()) {
// Create the temporary button, click and remove it
var tmpSubmit = document.createElement('button')
form.appendChild(tmpSubmit)
tmpSubmit.click()
form.removeChild(tmpSubmit)
} else {
// Form is valid, let the user proceed or do whatever we need to
}
}
Kode ini akan berfungsi di hampir semua browser umum (saya telah berhasil mengujinya ke IE11).
Berikut adalah contoh CodePen yang berfungsi.