UpdatePanel sepenuhnya menggantikan konten panel pembaruan pada pembaruan. Ini berarti bahwa peristiwa yang Anda langgani tidak lagi berlangganan karena ada elemen baru di panel pembaruan itu.
Apa yang telah saya lakukan untuk mengatasi ini adalah berlangganan kembali ke acara yang saya butuhkan setelah setiap pembaruan. Saya menggunakan $(document).ready()
untuk memuat awal, kemudian menggunakan Microsoft PageRequestManager
(tersedia jika Anda memiliki panel pembaruan pada halaman Anda) untuk berlangganan kembali setiap pembaruan.
$(document).ready(function() {
// bind your jQuery events here initially
});
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_endRequest(function() {
// re-bind your jQuery events here
});
Ini PageRequestManager
adalah objek javascript yang tersedia secara otomatis jika panel pembaruan ada di halaman. Anda tidak perlu melakukan apa pun selain kode di atas untuk menggunakannya selama UpdatePanel ada di halaman.
Jika Anda memerlukan kontrol yang lebih terperinci, peristiwa ini meneruskan argumen yang mirip dengan bagaimana .NET peristiwa dilewati argumen (sender, eventArgs)
sehingga Anda dapat melihat apa yang mengangkat peristiwa tersebut dan hanya mengikat kembali jika diperlukan.
Ini adalah versi terbaru dari dokumentasi dari Microsoft: msdn.microsoft.com/.../bb383810.aspx
Opsi yang lebih baik yang mungkin Anda miliki, tergantung pada kebutuhan Anda, adalah menggunakan jQuery's .on()
. Metode ini lebih efisien daripada berlangganan ulang ke elemen DOM pada setiap pembaruan. Baca semua dokumentasi sebelum Anda menggunakan pendekatan ini, karena mungkin atau mungkin tidak memenuhi kebutuhan Anda. Ada banyak plugin jQuery yang tidak masuk akal untuk ditolak untuk digunakan .delegate()
atau .on()
, jadi dalam kasus itu, Anda lebih baik berlangganan ulang.