2009-04-17 4 views

Répondre

10

Vous pouvez taper dans le PageRequestManager endRequestEvent:

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function(){}); 

Ou si elle est le contrôle les événements que vous essayez d'attacher, vous pouvez utiliser jQuery live events.

Une autre option consiste à effectuer la délégation d'événement manuellement. C'est ce que font les événements "en direct" sous les couvertures. Attachez le gestionnaire d'événements au document lui-même, puis exécutez conditionnellement votre méthode si l'expéditeur de l'événement était l'élément attendu.

$(document).click(function(e){ 
    if($(e.target).is(".collapseButton")){ 
     $(this).find(".collapsePanel").slideToggle(500); 
    } 
}) 
+0

merci qui a fonctionné, devinez que ce n'est pas aussi efficace, mais c'est seulement pour cette page. – Blankman

+0

C'est en fait très efficace. Si vous avez des gestionnaires d'événements sur chaque ligne d'une grille, cela aura un seul gestionnaire d'événements pour toute la grille. Cela devient encore meilleur si vous avez plusieurs gestionnaires d'événements pour chaque ligne. Vous pouvez vous débrouiller avec un seul .... et rien à attacher aux nouveaux enregistrements créés manuellement ou via des publications partielles. – Mark

6

Je suppose que 'partiel page de publication' que vous travaillez dans le pays Asp.net.

Essayez d'utiliser

Sys.Application.add_load(function() { }); 

Vous devriez toujours être en mesure d'utiliser tous les trucs jQuery normal à l'intérieur que fonct.

+0

Exactement. C'est exactement la raison pour laquelle MS a inventé cet événement de chargement: ils savaient qu'ils détruiraient les éléments DOM après des postbacks partiels, et ils devaient donner aux développeurs une seule façon de faire quand la page est prête, que les UpdatePanels AJAX soient utilisés ou non. ne pas. – JPot

+0

Parfait. Cela a fait l'affaire. J'ai juste appelé mes mêmes méthodes d'installation directement et via cet événement et ça fonctionne maintenant parfaitement. À votre santé! –

0

Certains éléments DOM sont remplacés lorsque vous effectuez une publication partielle et, bien entendu, les nouveaux éléments perdront les liaisons jQuery. Vous pouvez utiliser la classe ScriptManager pour enregistrer un script qui sera exécuté après la fin de postback partiel (un coup d'oeil here)

2

Vérifiez la fonctionnalité "live" de jQuery 1.3 here. Vous pouvez ajouter des événements aux éléments futurs ainsi qu'aux éléments actuels de la page. Cela peut simplifier le code que vous aurez besoin d'écrire.

+0

nous n'utilisons pas 1.3 donc cnt 'utiliser en direct. – Blankman

+1

Nous utilisons beaucoup les événements «en direct», mais parfois ils ne répondent pas aux besoins. Si vous utilisez jQuery pour manipuler le DOM, vous devrez le re-manipuler après sa mise à jour via la publication partielle. – Mark

+1

Vous pouvez obtenir le même effet de Live en effectuant la délégation d'événement manuellement. – Mark

0

La solution la plus élégante (en utilisant jQuery 2.x) est la suivante:

Utilisez le "sur" l'événement. Assurez-vous de lier l'événement au document et non à l'élément lui-même!

Exemple de code:

$(document).on('click', 'div.messages', function() { 
    console.log('click on div.messages'); 
    return false; 
}); 

Mettez ce code dans document.ready par exemple.

Cela fonctionne même si div.messages est modifié ou créé dans un UpdatePanel. Et il n'est jamais tiré deux fois ou plus à la fois.

Questions connexes