Tengo una página que tiene algún javascript que necesita ejecutarse en la carga de la página. Dicho javascript necesita localizar el componente del lado del cliente de un ServerControl, que lo hace con $ find().
Por supuesto, si emito mi código directamente en la página, se ejecuta cuando la página se está leyendo, y falla porque nada de lo que depende está aún inicializado.
Si pongo mi código dentro de la función pageLoad(), funciona bien, porque asp.net conecta automáticamente un controlador de carga para cualquier función llamada pageLoad(). El problema es que realmente no me gusta la solución pageLoad(), principalmente porque es un único nombre global. Si ingreso algún código usando pageLoad(), simplemente sé que algún otro programador va a copiar el enfoque, en algún lugar inapropiado, y vamos a terminar con una página que incluye dos o más funciones diferentes de pageLoad(), y el resultado será un montón de misteriosos errores que llevará una eternidad rastrear.
Así que puse mi código dentro de una función anónima pasada a jquery's $ (document) .ready(). Esto falla, porque se ejecuta antes de que exista el componente del lado del cliente de ServerControl.
Así que puse mi código dentro de una función anónima pasada por Sys.Application.add_load(). Esto también falla, porque Sys no está definido.
Así que finalmente me fijo en poner mi código dentro de Sys.Application.add_load(), y luego ponerlo dentro de una función llamada por $ (document) .ready(). Esto funciona, pero produce casi tanta acidez estomacal como pageLoad().
<script type="text/javascript">
$(document).ready(function(){
Sys.Application.add_load(function(){
var component = $find(<clientid>);
if (component) { <do something> }
});
});
</script>
Tiene que haber una forma mejor de manejar esto.
¿Alguna idea?
Eso parece funcionar para nosotros. –