Un UpdatePanel remplace complètement le contenu du panneau de mise à jour lors d'une mise à jour. Cela signifie que les événements auxquels vous vous êtes abonné ne sont plus abonnés car il y a de nouveaux éléments dans ce panneau de mise à jour.
Ce que j'ai fait pour contourner ce problème, c'est me réinscrire aux événements dont j'ai besoin après chaque mise à jour. J'utilise $(document).ready()
pour le chargement initial, puis j'utilise Microsoft PageRequestManager
(disponible si vous avez un panneau de mise à jour sur votre page) pour vous réinscrire à chaque mise à jour.
$(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
});
Il PageRequestManager
s'agit d'un objet javascript qui est automatiquement disponible si un panneau de mise à jour est sur la page. Vous ne devriez pas avoir besoin de faire autre chose que le code ci-dessus pour l'utiliser tant que le UpdatePanel est sur la page.
Si vous avez besoin d'un contrôle plus détaillé, cet événement transmet des arguments similaires à la façon dont les événements .NET sont transmis (sender, eventArgs)
afin que vous puissiez voir ce qui a déclenché l'événement et ne le relier que si nécessaire.
Voici la dernière version de la documentation de Microsoft: msdn.microsoft.com/.../bb383810.aspx
Une meilleure option que vous pourriez avoir, selon vos besoins, est d'utiliser jQuery .on()
. Ces méthodes sont plus efficaces que la réabonnement aux éléments DOM à chaque mise à jour. Lisez cependant toute la documentation avant d'utiliser cette approche, car elle peut ou non répondre à vos besoins. Il y a beaucoup de plugins jQuery qu'il serait déraisonnable de refactoriser pour utiliser .delegate()
ou .on()
, dans ces cas, vous feriez mieux de vous réinscrire.