6
votes

Lorsque le jgrosse est appelé, la boîte épaisse cesse de fonctionner correctement (à l'aide de UpdatePanel)

J'appelle une boîte épaisse lorsqu'un lien est cliqué sur: xxx pré>

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);


2 commentaires

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


3 Réponses :


1
votes
protected void Button1_Click(object sender, EventArgs e)
{
    ScriptManager.RegisterStartupScript(this.Page, typeof(Page), Guid.NewGuid().ToString(),
            "$.jGrowl('My Message');", true);
}

0 commentaires

2
votes

Je crois que votre problème n'a rien à voir avec JGRAMOWL, et tout faire avec votre utilisation d'un Panneau Update.

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 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 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.

Il existe plusieurs façons de résoudre ce problème, en fonction de votre situation.

option 1 : basée sur votre code collé ci-dessus, il ne ressemble à rien de modifications réellement liées au lien lors de la manipulation de votre publication. Donc, peut-être que vous pourriez déplacer votre

en dehors de l'accord de mise à jour et laissez uniquement le bouton à l'intérieur. Cela conservera votre lien dans le cadre de la page et il aura toujours un gestionnaire de la boîte épais attaché.

Option 2 : S'il y a une raison quelconque, vous ne pouvez pas aller avec l'option 1, vous pouvez définir un point JavaScript pour exécuter pendant la charge de votre UPDATE UPDKPANEL pour réattacher le gestionnaire de clic pour votre lien. . Dans la fonction qui appelle jGroud, essayez d'ajouter tb_init ('a.thickbox'); à votre code.

option 3 : vous pouvez modifier le fichier épaisbox.js pour utiliser le gestionnaire LIVE de JQuery's's Live Handler au lieu du gestionnaire de clic normal. Dans la fonction tb_init , vous le modifierez pour être $ (Domchunk) .Live ("Cliquez sur", fonction () {..}) . Je pense que cela fonctionnerait, bien que cela soit possible, le processus du panneau de mise à jour puisse toujours la maller.

J'espère que cela aide.


2 commentaires

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.



2
votes

Je ne comprends pas l'architecture de votre page complètement, mais comme @patmortech note le 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>

Quel que soit le code que vous utilisez pour configurer les liaisons épaisses et jGROWL, ajoutez ici: P>

Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function() {
    // page config code
});


1 commentaires

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 Tags dans votre fichier ASCX / ASPX. Vous pouvez mettre dans un fichier externe .js que vous incluez.