Saya memiliki formulir dengan beberapa kumpulan bidang yang berbeda. Saya memiliki beberapa Javascript yang menampilkan kumpulan bidang kepada pengguna satu per satu. Untuk browser yang mendukung validasi HTML5, saya ingin memanfaatkannya. Namun, saya harus melakukannya dengan persyaratan saya. Saya menggunakan JQuery.
Ketika pengguna mengklik Tautan JS untuk pindah ke fieldset berikutnya, saya memerlukan validasi terjadi pada fieldset saat ini dan memblokir pengguna agar tidak bergerak maju jika ada masalah.
Idealnya, saat pengguna kehilangan fokus pada suatu elemen, validasi akan terjadi.
Saat ini sudah tidak valid lagi berjalan dan menggunakan Javascript. Lebih suka menggunakan metode asli. :)
sumber
$('<input type="submit">').hide().appendTo($myForm).click().remove();
form.submit()
bekerja dengan baik? Atau apakah HTML5 memerlukan tombol kirim untuk validasi sekarang?.submit()
tidak bekerja untuk saya. Solusi @ philfo berhasil. Hmm.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:
Dan mari ambil elemen UI kita di JavaScript:
Tidak memerlukan dukungan untuk browser lama seperti Internet Explorer? Ini adalah untuk Anda.
Semua browser modern mendukung para
reportValidity()
metode padaform
elemen.Itu dia, kita sudah selesai. Juga, inilah CodePen sederhana yang menggunakan pendekatan ini.
Pendekatan untuk browser lama
Jika
reportValidity()
tidak didukung, kita perlu sedikit menipu browser. Jadi apa yang akan kita lakukan?form.checkValidity()
. Ini akan memberi tahu kami jika formulir tersebut valid, tetapi tidak menampilkan UI validasi.Dalam kode:
Kode ini akan berfungsi di hampir semua browser umum (saya telah berhasil mengujinya ke IE11).
Berikut adalah contoh CodePen yang berfungsi.
sumber
Dalam beberapa hal, Anda BISA
trigger
memvalidasi formulir HTML5 dan menunjukkan petunjuk kepada pengguna tanpa mengirimkan formulir!Dua tombol, satu untuk validasi, satu untuk kirim
Setel
onclick
pendengar pada tombol validasi untuk menyetel bendera global (katakanlahjustValidate
) untuk menunjukkan klik ini dimaksudkan untuk memeriksa validasi formulir.Dan setel
onclick
pendengar pada tombol kirim untuk menyeteljustValidate
bendera ke false.Kemudian di
onsubmit
handler formulir, Anda memeriksa benderajustValidate
untuk memutuskan nilai yang dikembalikan dan memintapreventDefault()
untuk menghentikan pengiriman formulir. Seperti yang Anda ketahui, validasi formulir HTML5 (dan petunjuk GUI kepada pengguna) dilakukan sebelumonsubmit
acara, dan bahkan jika formulirnya VALID Anda dapat menghentikan pengiriman formulir dengan mengembalikan false atau memanggilpreventDefault()
.Dan, di HTML5 Anda memiliki metode untuk memeriksa validasi formulir: itu
form.checkValidity()
, kemudian Anda dapat mengetahui apakah formulir tersebut divalidasi atau tidak dalam kode Anda.Oke, berikut demo nya: http://jsbin.com/buvuku/2/edit
sumber
Saya tidak yakin apakah pantas bagi saya untuk mengetik semua ini dari awal karena artikel yang diterbitkan di A List Apart ini menjelaskannya dengan cukup baik. MDN juga memiliki panduan praktis untuk formulir dan validasi HTML5 (mencakup API dan juga CSS terkait).
sumber
Agak mudah untuk menambahkan atau menghapus validasi HTML5 ke kumpulan bidang.
sumber
Sepertinya saya menemukan triknya: Hapus saja
target
atribut formulir , lalu gunakan tombol kirim untuk memvalidasi formulir dan menunjukkan petunjuk, periksa apakah formulir valid melalui JavaScript, lalu posting apa pun. Kode berikut berfungsi untuk saya:sumber
Kode Html:
javascript (menggunakan Jquery):
Semoga ini bisa membantu Anda
sumber
sumber
Untuk bidang masukan
sumber
Jika ada proses validasi yang sangat kompleks (terutama asinkron), ada solusi sederhana:
sumber
Cara lain untuk mengatasi masalah ini:
sumber
Uncaught TypeError: $(...).oninvalid is not a function
dan saya tidak melihatnya di dokumen jQuery.