Ada beberapa hal yang perlu Anda ingat.
1. Ada beberapa cara untuk mengirimkan formulir
- menggunakan tombol kirim
- dengan menekan enter
- dengan memicu acara kirim dalam JavaScript
- mungkin lebih tergantung pada perangkat atau perangkat masa depan.
Karena itu kita harus mengikat acara ajukan formulir , bukan acara klik tombol. Ini akan memastikan kode kami berfungsi pada semua perangkat dan teknologi bantu sekarang dan di masa depan.
2. Hijax
Pengguna mungkin tidak mengaktifkan JavaScript. Sebuah Hijax pola baik di sini, di mana kita lembut mengambil kendali dari bentuk menggunakan JavaScript, tapi biarkan submittable jika JavaScript gagal.
Kita harus menarik URL dan metode dari formulir, jadi jika HTML berubah, kita tidak perlu memperbarui JavaScript.
3. JavaScript yang tidak mengganggu
Menggunakan event.preventDefault () alih-alih mengembalikan false adalah praktik yang baik karena memungkinkan acara untuk muncul. Ini memungkinkan skrip lain mengikat ke dalam acara tersebut, misalnya skrip analitik yang mungkin memantau interaksi pengguna.
Kecepatan
Kita sebaiknya menggunakan skrip eksternal, daripada memasukkan skrip inline kami. Kami dapat menautkan ini di bagian kepala halaman menggunakan tag skrip, atau menautkannya di bagian bawah halaman untuk kecepatan. Script harus secara diam-diam meningkatkan pengalaman pengguna, tidak menghalangi.
Kode
Dengan asumsi Anda setuju dengan semua hal di atas, dan Anda ingin menangkap acara pengiriman, dan menanganinya melalui AJAX (pola hijax), Anda dapat melakukan sesuatu seperti ini:
$(function() {
$('form.my_form').submit(function(event) {
event.preventDefault(); // Prevent the form from submitting via the browser
var form = $(this);
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize()
}).done(function(data) {
// Optionally alert the user of success here...
}).fail(function(data) {
// Optionally alert the user of an error here...
});
});
});
Anda dapat secara manual memicu pengiriman formulir kapan pun Anda suka melalui JavaScript menggunakan sesuatu seperti:
$(function() {
$('form.my_form').trigger('submit');
});
Edit:
Baru-baru ini saya harus melakukan ini dan akhirnya menulis sebuah plugin.
(function($) {
$.fn.autosubmit = function() {
this.submit(function(event) {
event.preventDefault();
var form = $(this);
$.ajax({
type: form.attr('method'),
url: form.attr('action'),
data: form.serialize()
}).done(function(data) {
// Optionally alert the user of success here...
}).fail(function(data) {
// Optionally alert the user of an error here...
});
});
return this;
}
})(jQuery)
Tambahkan atribut data-autosubmit ke tag formulir Anda dan kemudian Anda bisa melakukan ini:
HTML
<form action="/blah" method="post" data-autosubmit>
<!-- Form goes here -->
</form>
JS
$(function() {
$('form[data-autosubmit]').autosubmit();
});