2010-09-10 5 views
1

Ma page Web maître contient du code JS pour remplacer les alertes standard avec des boîtes de dialogue jQuery personnalisées.RegisterClientScriptBloc confusion

<script type="text/javascript" language="javascript"> 
     window.alert=function(alertMessage) 
     { 
      $.msgbox(alertMessage, {type: "info"}); 
     }    
</script> 

Dans la méthode default.aspx page web onLoad Je suis en train d'enregistrer et afficher script d'alerte

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "InvalidPassword", 
       "alert(\"Your login attempt was not successful. Please try again.\");", 
       true); 

Malheureusement, il ne fonctionne pas. Si je supprime le code JS qui remplace la boîte d'alerte tout fonctionne bien, la boîte d'alerte apparaît. Le remplacement JS est correct, il fonctionne très bien si j'exécute js d'alerte dans le côté client, mais cela ne fonctionne pas si j'essaye d'exécuter du code du côté du serveur.

Quelqu'un pourrait-il expliquer où est le problème?

Répondre

3

Je rencontre le même problème lorsque j'essaie de l'exécuter à partir de l'événement page_load de la page aspx, mais lorsque je l'exécute à partir de l'événement body onload, cela fonctionne. Je pense que cela se produit car l'événement page_load se produit avant que votre remplacement window.alert ait une chance d'être exécuté.

Essayez ceci dans la balise body:

<body onload="alert('Your login attempt was not successful. Please try again.');"> 

Et le jQuery:

$(function() { 

     window.alert = function (message) { 
      $('#dialog').text(message).dialog(); 
     } 

}); 

J'utilise le plugin de dialogue jQuery UI par la manière.

0

Ok, j'ai trouvé où est le problème. Si le code enregistré avec RegisterClientScriptBlock fait référence à un autre code JS, nous devons charger la page Web dans son intégralité. Il semble que JS enregistré dans RegisterClientScriptBlock soit exécuté immédiatement lorsqu'il est chargé dans le navigateur, peu importe si la page Web est chargée ou non. Nous devons donc exécuter du code après le chargement complet de la page Web. Nous pouvons utiliser l'événement jQuery ci-dessous pour trouver

$(document).ready(function() { 



    }); 

Le code complet ressemblera

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "InvalidPassword", 
        "$(document).ready(function() {alert(\"Your login attempt was not successful. Please try again.\");})", 
        true); 
+1

bonne solution mais que le comportement est pas spécifique à RegisterClientBlockScript - javascript est toujours exécuté dès que le navigateur voit En fait, tous les navigateurs bloquent tout autre rendu et demande de ressources lors du traitement d'un