2009-06-12 11 views

Répondre

33

Oui ... Comme la plupart des langages, JavaScript requiert que les symboles soient uniques dans leur portée. En JavaScript, si vous créez plusieurs définitions pour une fonction dans une portée donnée, alors la dernière à être définie "gagne" - ce sera comme si les définitions précédentes n'existaient jamais. Pour que votre fonction pageLoad redondante fonctionne, vous devez utiliser la méthode Sys.Application.add_load() pour faire fonctionner votre fonction redondante

En l'utilisant, vous pouvez attacher autant de gestionnaires que vous le souhaitez à l'événement de chargement de page. De plus, vous pouvez utiliser la fonction anonyme pour ajouter dans la méthode add_load. Cela vous garantira qu'il n'y a aucun danger pour les gestionnaires avec des noms en double. Exemple:

StringBuilder sb = new StringBuilder(); 
    sb.Append("Sys.Application.add_load("); 
    sb.Append("function() { alert('page load'); });"); 

ClientScript.RegisterStartupScript(this.GetType(), "Page_Load", sb.ToString(), true); 

Vous pouvez aussi facilement utiliser le Sys.Application.add_load du côté client, vous pouvez même ajouter le même gestionnaire plus d'une fois. Cela entraînera le lancement de la même fonction plusieurs fois :)

-2

Je suis en désaccord avec Shog9 ...

Je sais qu'il est possible d'avoir plusieurs $ (document) .ready (f (n)) appelle dans un seul document, chacun étant appelé à son tour lorsque le DOM finit le chargement. Je ne crois pas que plusieurs appels à ClientScript.RegisterStartupScript() provoquent des problèmes non plus.

+7

Josh, vous parlez de jQuery, qui prend en charge la liaison de plusieurs gestionnaires à un seul événement. Il parle de la liaison automatique ASP.NET AJAX intégrée de la fonction globale pageLoad. Alors qu'ASP.NET AJAX supporte également la liaison de plusieurs gestionnaires à un seul événement, cela ne change rien au fait que le langage sous-jacent ne supporte pas plusieurs fonctions avec le même nom! – Shog9

+0

ahh bon point! J'ai manqué cela dans le message original. Merci de m'avoir corrigé –

Questions connexes