2009-06-12 10 views
16

Ho un controllo ASP.Net che inietta una funzione javascript pageLoad. Ho anche una funzione pageLoad direttamente sulla pagina. Non riesco a farli sparare entrambi. Sei limitato a una sola funzione con lo stesso nome in javascript?ASP.Net AJAX multiple pageLoad funzioni possibili?

risposta

33

Sì ... Come la maggior parte delle lingue, JavaScript richiede che i simboli siano unici nell'ambito di applicazione. In JavaScript, se crei più definizioni per una funzione all'interno di un dato ambito, allora l'ultimo da definire "vince" - sarà come se le definizioni precedenti non fossero mai esistite.

È necessario utilizzare il metodo Sys.Application.add_load() per eseguire la funzione ridondante pageLoad. Usandolo, puoi collegare quanti più gestori desideri all'evento di caricamento della pagina. Inoltre, puoi utilizzare la funzione anonima per aggiungere il metodo add_load. In questo modo ti garantirai che non vi è alcun pericolo per i gestori con nomi duplicati. Esempio:

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

Si può facilmente utilizzare il Sys.Application.add_load sul lato client, è possibile anche aggiungere lo stesso gestore più di una volta. Ciò comporterà l'attivazione della stessa funzione più volte :)

-2

Non sono d'accordo con Shog9 ...

So che è possibile avere più $ (document) .ready (f (n)) chiama in un unico documento, ciascuno dei quali è chiamato a sua volta, quando il DOM finisce il caricamento. Non credo che più chiamate a ClientScript.RegisterStartupScript() causino problemi.

+7

Josh, stai parlando di jQuery, che supporta l'associazione di più gestori a un singolo evento. Sta parlando dell'associazione automatica integrata di ASP.NET AJAX della funzione globale pageLoad. Mentre ASP.NET AJAX supporta anche il binding di gestori multipli per un singolo evento, ciò non cambia il fatto che la lingua sottostante non supporta più funzioni con lo stesso nome! – Shog9

+0

ahh buon punto! L'ho perso nel post originale. Grazie per avermi corretto su questo –