Beberapa waktu yang lalu saya membutuhkan sesuatu yang sangat mirip ... dan saya mendapatkannya.
Jadi yang saya taruh di sini adalah bagaimana saya melakukan trik agar formulir dapat dikirimkan oleh JavaScript tanpa memvalidasi dan mengeksekusi validasi hanya ketika pengguna menekan tombol (biasanya tombol kirim).
Sebagai contoh saya akan menggunakan formulir minimal, hanya dengan dua bidang dan tombol kirim.
Ingat apa yang diinginkan: Dari JavaScript itu harus dapat dikirimkan tanpa pengecekan. Namun, jika pengguna menekan tombol seperti itu, validasi harus dilakukan dan formulir dikirim hanya jika melewati validasi.
Biasanya semua akan dimulai dari sesuatu di dekat ini (saya menghapus semua hal tambahan tidak penting):
<form method="post" id="theFormID" name="theFormID" action="">
<input type="text" id="Field1" name="Field1" />
<input type="text" id="Field2" name="Field2" />
<input type="submit" value="Send" onclick="JavaScript:return Validator();" />
</form>
Lihat bagaimana tag formulir tidak memiliki onsubmit="..."
(ingat itu syarat untuk tidak memilikinya).
Masalahnya adalah bahwa formulir selalu dikirimkan, tidak peduli apakah onclick
kembali true
atau false
.
Jika saya mengubah type="submit"
untuk type="button"
, tampaknya bekerja tetapi tidak. Tidak pernah mengirimkan formulir, tetapi itu bisa dilakukan dengan mudah.
Jadi akhirnya saya menggunakan ini:
<form method="post" id="theFormID" name="theFormID" action="">
<input type="text" id="Field1" name="Field1" />
<input type="text" id="Field2" name="Field2" />
<input type="button" value="Send" onclick="JavaScript:return Validator();" />
</form>
Dan function Validator
, di mana return True;
, saya juga menambahkan kalimat pengiriman JavaScript, sesuatu yang mirip dengan ini:
function Validator(){
// ...bla bla bla... the checks
if( ){
document.getElementById('theFormID').submit();
return(true);
}else{
return(false);
}
}
Ini id=""
hanya untuk JavaScript getElementById
, name=""
itu hanya untuk itu muncul pada data POST.
Cara seperti itu berfungsi seperti yang saya butuhkan.
Saya menempatkan ini hanya untuk orang-orang yang tidak memerlukan onsubmit
fungsi pada formulir, tetapi membuat beberapa validasi ketika tombol ditekan oleh pengguna.
Mengapa saya tidak perlu mengirimkan pada tag formulir? Mudah, pada bagian JavaScript lain saya perlu melakukan pengiriman tetapi saya tidak ingin ada validasi.
Alasannya: Jika pengguna adalah orang yang melakukan pengiriman, saya ingin dan perlu validasi untuk dilakukan, tetapi jika itu JavaScript, kadang-kadang saya perlu melakukan pengiriman sementara validasi seperti itu akan menghindarinya.
Ini mungkin terdengar aneh, tetapi tidak ketika berpikir misalnya: pada Login ... dengan beberapa batasan ... seperti tidak diizinkan untuk menggunakan sesi PHP dan cookie tidak diizinkan!
Jadi, tautan apa pun harus dikonversi ke formulir yang dikirimkan, sehingga data masuk tidak hilang. Ketika belum ada login, itu juga harus berfungsi. Jadi tidak ada validasi yang harus dilakukan pada tautan. Tapi saya ingin menyajikan pesan kepada pengguna jika pengguna belum memasukkan kedua bidang, pengguna dan pass. Jadi, jika ada yang hilang, formulir itu tidak boleh dikirim! ada masalahnya.
Lihat masalahnya: formulir tidak boleh dikirim ketika satu bidang kosong hanya jika pengguna telah menekan tombol, jika itu adalah kode JavaScript, ia harus dapat dikirim.
Jika saya melakukan pekerjaan pada onsubmit
tag formulir, saya perlu tahu apakah itu pengguna atau JavaScript lainnya. Karena tidak ada parameter yang dapat dilewati, itu tidak mungkin secara langsung, sehingga beberapa orang menambahkan variabel untuk mengetahui apakah validasi harus dilakukan atau tidak. Hal pertama pada fungsi validasi adalah memeriksa nilai variabel itu, dll ... Terlalu rumit dan kode tidak mengatakan apa yang benar-benar diinginkan.
Jadi solusinya adalah tidak memiliki onsubmit pada tag form. Insead meletakkannya di tempat yang benar-benar dibutuhkan, di tombol.
Untuk sisi lain, mengapa meletakkan kode onsubmit karena secara konsep saya tidak ingin validasi onsubmit. Saya sangat ingin validasi tombol.
Tidak hanya kode lebih jelas, itu adalah di mana harus. Hanya ingat ini: - Saya tidak ingin JavaScript memvalidasi formulir (yang harus selalu dilakukan oleh PHP di sisi server) - Saya ingin menunjukkan kepada pengguna pesan yang mengatakan semua bidang tidak boleh kosong, yang membutuhkan JavaScript (klien sisi)
Jadi mengapa sebagian orang (berpikir atau memberi tahu saya) itu harus dilakukan dengan validasi onsumbit? Tidak, secara konseptual saya tidak melakukan onsumbit memvalidasi di sisi klien. Saya hanya melakukan sesuatu pada tombol ditekan, jadi mengapa tidak membiarkan itu diterapkan?
Baik kode dan gaya melakukan trik dengan sempurna. Pada JavaScript apa pun yang saya perlukan untuk mengirim formulir yang baru saja saya masukkan:
document.getElementById('theFormID').action='./GoToThisPage.php'; // Where to go
document.getElementById('theFormID').submit(); // Send POST data and go there
Dan itu melompati validasi ketika saya tidak membutuhkannya. Itu hanya mengirim formulir dan memuat halaman yang berbeda, dll.
Tetapi jika pengguna mengklik tombol kirim (alias type="button"
tidak type="submit"
) validasi dilakukan sebelum membiarkan formulir dikirimkan dan jika tidak valid tidak dikirim.
Semoga ini membantu orang lain untuk tidak mencoba kode yang panjang dan rumit. Hanya tidak digunakan onsubmit
jika tidak diperlukan, dan gunakan onclick
. Tapi ingat untuk mengubah type="submit"
ke type="button"
dan jangan lupa untuk melakukan submit()
oleh JavaScript.