Saya punya masalah dengan .on()
. Saya memiliki beberapa elemen bentuk (formulir dengan class="remember"
), juga saya menambahkan satu sama lain form.remember
menggunakan AJAX. Jadi, saya ingin menangani acara pengiriman seperti:
$('form.remember').on('submit',function(){...})
tetapi formulir yang ditambahkan dengan AJAX tidak berfungsi dengannya.
Dimana masalahnya? Apakah ini bug?
$(document).on('submit','form.remember',function(){...})
document
dengan induk statis terdekat.Jawaban:
Anda perlu mendelegasikan acara ke tingkat dokumen
$('form.remember').on('submit'
bekerja sama seperti$('form.remember').submit(
tetapi ketika Anda menggunakannya$(document).on('submit','form.remember'
maka itu juga akan berfungsi untuk DOM yang ditambahkan nanti.sumber
$(document).on
memiliki kinerja yang jauh lebih rendah daripada$('form.remember').on('submit'
. Sekarang harus mendengarkan semua peristiwa pengiriman dalam dokumen. Jauh lebih baik membatasi ruang lingkup sedikit daripada mendengarkanon
document
, jika mungkinSaya punya masalah dengan gejala yang sama. Dalam kasus saya, ternyata fungsi submit saya tidak memiliki pernyataan "return".
Sebagai contoh:
sumber
return false;
tidak akan mengirimkan formulir. Untuk mengirimkan formulir gunakanreturn true;
.Masalahnya di sini adalah bahwa "on" diterapkan ke semua elemen yang ada PADA WAKTU. Saat Anda membuat elemen secara dinamis, Anda perlu menjalankannya lagi:
Karena formulir biasanya memiliki nama atau ID, Anda juga dapat melampirkan ke formulir baru. Jika saya membuat banyak hal dinamis, saya akan menyertakan fungsi setup atau bind:
Jadi setiap kali Anda membuat sesuatu (tombol biasanya dalam kasus saya), saya hanya memanggil bindItems untuk memperbarui semua yang ada di halaman.
Saya tidak suka menggunakan 'body' atau elemen dokumen karena dengan tab dan modals mereka cenderung berkeliaran dan melakukan hal-hal yang tidak Anda harapkan. Saya selalu berusaha sespesifik mungkin kecuali proyek 1 halaman yang sederhana.
sumber