Saya memiliki formulir yang, ketika dikirim, saya perlu melakukan beberapa pemrosesan tambahan sebelum mengirimkan formulir. Saya dapat mencegah perilaku pengiriman formulir default, kemudian melakukan pemrosesan tambahan saya (pada dasarnya memanggil Google Maps API dan menambahkan beberapa bidang tersembunyi ke formulir) - dan kemudian saya memerlukan formulir untuk dikirim.
Apakah ada cara untuk "mencegah default", kemudian beberapa hal kemudian "melanjutkan default?"
javascript
jquery
StackOverflowNewbie
sumber
sumber
Jawaban:
Saat Anda mengikat
.submit()
acara ke formulir, dan Anda melakukan hal-hal yang ingin Anda lakukan sebelum kembali (benar), hal-hal ini terjadi sebelum pengiriman yang sebenarnya.Sebagai contoh:
Contoh sederhana
Contoh lain di jquery.com: http://api.jquery.com/submit/#entry-examples
sumber
Menggunakan
jQuery.one()
Penggunaan
one
prevent juga infinite loop karenasubmit
peristiwa kustom ini dilepas setelah pengiriman pertama.sumber
Saya hanya akan melakukan:
Panggil
preventDefault
pada awalnya dan gunakansubmit()
fungsi nanti, jika Anda hanya perlu mengirimkan formulirsumber
Dengan cara ini Anda akan melakukan Loop tanpa akhir di JS Anda. untuk melakukan cara yang lebih baik Anda dapat menggunakan yang berikut ini
Saya harap ini membantu! Terima kasih!
sumber
Ini, IMHO, solusi paling umum dan kuat (jika tindakan Anda dipicu oleh pengguna, misalnya 'pengguna mengklik tombol'):
Sebagai contoh, perhatikan solusi elegan ini untuk menambahkan "Apakah Anda yakin?" popup ke tombol apa saja hanya dengan mendekorasi tombol dengan atribut. Kami akan melanjutkan perilaku default secara bersyarat jika pengguna tidak memilih keluar.
1. Mari tambahkan ke setiap tombol yang kita ingin teks peringatan "Anda yakin" muncul:
2. Pasang penangan ke SEMUA tombol seperti itu:
Itu dia.
sumber
sumber
Dengan
jQuery
dan variasi kecil dari jawaban @ Joepreludian di atas:Poin penting yang perlu diperhatikan:
.one(...)
sebagai gantinya.on(...) or .submit(...)
named
fungsi alih-alihanonymous function
karena kita akan merujuknya di dalamcallback
.Anda dapat mengubah nilai
allIsWell
variabel pada cuplikan di bawah ini menjaditrue
ataufalse
untuk menguji fungsionalitas:Semoga berhasil...
sumber
Dengan cara Javascript murni, Anda dapat mengirimkan formulir setelah mencegah default.
Hal ini karena
HTMLFormElement.submit()
tidak pernah menyebut ituonSubmit()
. Jadi kami mengandalkan keanehan spesifikasi tersebut untuk mengirimkan formulir seolah-olah tidak memiliki penangan kustom pengiriman di sini.Lihat biola ini untuk permintaan sinkron.
Menunggu permintaan asinkron selesai sama mudahnya:
Anda dapat melihat biola saya untuk contoh permintaan asinkron.
Dan jika Anda turun dengan janji:
Dan inilah yang request .
sumber
Anda dapat menggunakan
e.preventDefault()
yang akan menghentikan operasi saat ini.daripada yang bisa Anda lakukan
$("#form").submit();
sumber
"Injeksi validasi tanpa mengirimkan perulangan":
Saya hanya ingin memeriksa reCaptcha dan beberapa hal lain sebelum validasi HTML5, jadi saya melakukan sesuatu seperti itu (fungsi validasi mengembalikan true atau false):
sumber