J'appelle une boîte épaisse lorsqu'un lien est cliqué sur: et, lorsqu'un bouton serveur est cliqué, j'appelle cette fonction JavaScript pour afficher une notification jGRAMOWL: P> ScriptManager.RegisterStartupScript(this.Page, typeof(Page), Guid.NewGuid().ToString(),
"$.jGrowl('My Message');", true);
3 Réponses :
protected void Button1_Click(object sender, EventArgs e) { ScriptManager.RegisterStartupScript(this.Page, typeof(Page), Guid.NewGuid().ToString(), "$.jGrowl('My Message');", true); }
Je crois que votre problème n'a rien à voir avec JGRAMOWL, et tout faire avec votre utilisation d'un Panneau Update. P>
Lorsque vous utilisez un Panneau Update, il rafraîchit tous les éléments du DOM qui y sont contenus. Ce que cela signifie est que l'étiquette d'origine Il existe plusieurs façons de résoudre ce problème, en fonction de votre situation. P>
J'espère que cela aide. P>
Vos solutions possibles ont été incroyablement utiles. Après avoir attendu longtemps, j'ai enfin trouvé des réponses au problème. J'ai essayé votre option 1 et l'option 3 et j'ai résolu mon problème. Personnellement, je préfère l'option 3 car il y a des cas où je devrai avoir les liens dans le cadre de l'UPDOWPANEL (cet exemple n'était qu'un cas simplifié pour illustrer clairement le problème). Par conséquent, je me demande dans quel cas l'option 3 ne fonctionnerait pas? Quand devrais-je être plus prudent en utilisant cette solution? Encore une fois. Merci beaucoup.
+1 pour l'option 2. Je pense que c'est la meilleure façon d'aller après ce problème. code> créée dans la page et que son événement de clic défini pour utiliser une boîte épaisse n'existe plus. Une fois que l'UpdatePanel rafraîchit, vous avez maintenant une nouvelle étiquette
code> qui a la classe BOXbox, mais n'a pas été "initialisée" (puisque la boîte épais définit le gestionnaire de clic lors de la charge de la page, ce qui ne se produit pas. comme la normale pendant un post-plan partiel). Par conséquent, lorsque vous cliquez sur le lien, il agit comme un lien normal. P>
tb_init ('a.thickbox'); code> à votre code. P>
tb_init code>, vous le modifierez pour être
$ (Domchunk) .Live ("Cliquez sur", fonction () {..}) code>. Je pense que cela fonctionnerait, bien que cela soit possible, le processus du panneau de mise à jour puisse toujours la maller. P>
Je ne comprends pas l'architecture de votre page complètement, mais comme @patmortech note le Quel que soit le code que vous utilisez pour configurer les liaisons épaisses et jGROWL, ajoutez ici: P> updatepanel code> provoque le remplacement totalement des éléments DOM sur chaque message ASYNC. Vous devez reculer des éléments affectés.
$ (document) .Ready code> n'est pas assez bon lorsque vous avez affaire à des panneaux Update. Il ne sera appelé que sur la charge de première page (pas après un rafraîchissement code> updatebanel code>). La solution consiste à accrocher à l'architecture Ajax d'ASP.NET pour votre code de configuration. P>
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function() {
// page config code
});
Ceci est juste JavaScript. Peu importe l'endroit où il apparaît sur votre page. Vous pouvez utiliser enregistrementStartupscript identique à celui que vous faites déjà. Vous pouvez le mettre en balise entre
.js code> que vous incluez.
Juste pour être clair, dis-tu que le problème est que lorsque vous cliquez sur votre lien après l'affichage du jGROWL, cela agit simplement comme un lien normal et n'ouvre pas la page dans une boîte épaisse?
Oui, c'est exactement ce que je voulais dire