Ho una pagina che ha qualche javascript che deve essere eseguito al caricamento della pagina. Detto javascript ha bisogno di individuare il componente lato client di un ServerControl, che fa con $ find().
Ovviamente, se emetto il mio codice direttamente sulla pagina, viene eseguito mentre la pagina viene letta e non riesce perché non viene ancora inizializzato nulla.
Se inserisco il mio codice all'interno di una funzione pageLoad(), funziona perfettamente, perché asp.net collega automaticamente un gestore onload per qualsiasi funzione denominata pageLoad(). Il problema è che non mi piace la soluzione pageLoad(), principalmente perché è un singolo nome globale. Se commetto un codice usando pageLoad(), so solo che un altro programmatore sta per copiare l'approccio, da qualche parte inappropriato, e finiremo con una pagina che include due o più funzioni diverse di PageLoad(), e il risultato sarà un mucchio di errori misteriosi che impiegheranno per sempre a rintracciare.
Quindi, ho inserito il mio codice all'interno di una funzione anonima passata a jquery $ (documento) .ready(). Ciò non riesce, poiché viene eseguito prima dell'esistenza del componente lato client di ServerControl.
Quindi, ho inserito il mio codice all'interno di una funzione anonima passata a Sys.Application.add_load(). Anche questo fallisce, perché Sys non è definito.
Quindi alla fine mi accontento di inserire il mio codice all'interno di Sys.Application.add_load(), e poi lo metto dentro una funzione chiamata da $ (document) .ready(). Funziona, ma dà quasi il bruciore di stomaco di pageLoad().
<script type="text/javascript">
$(document).ready(function(){
Sys.Application.add_load(function(){
var component = $find(<clientid>);
if (component) { <do something> }
});
});
</script>
Ci deve essere un modo migliore di gestirlo.
Qualche idea?
Sembra funzionare per noi. –