2009-06-03 12 views
20

Tengo un aspx que tiene la siguiente función de javascript que se ejecuta durante el evento de carga del cuerpo.Enganche de un evento de javascript a la carga de la página

<body onload="startClock();"> 

Sin embargo, estoy estableciendo el aspx para utilizar una página maestra, por lo que el cuerpo de la etiqueta no existe en el aspx más. ¿Cómo hago para registrar la función startClock para que se ejecute cuando se golpea la página y todavía tengo que usar una página maestra?

Respuesta

30

Si no desea asignar explícitamente window.onload o usar un marco , considere:

<script type="text/javascript"> 
function startClock(){ 
    //do onload work 
} 
if(window.addEventListener){ 
    window.addEventListener('load',startClock,false); //W3C 
} 
else{ 
    window.attachEvent('onload',startClock); //IE 
} 
</script> 

http://www.quirksmode.org/js/events_advanced.html

+0

+1 - Era demasiado flojo para escribir esta respuesta, pero esta es la manera en que yo sugeriría que alguien también lo haga, con las mismas suposiciones que usted inicialmente dice. –

+0

Por supuesto, me gustaría abstraer un poco los detalles - con suerte eso es obvio para el OP ... –

+0

Me falta algo muy obvio aquí, pero ¿a dónde va el bloque 'if' de código? No puedes simplemente volcar eso en una etiqueta

1

Inserta esto en cualquier parte del cuerpo de la página:

<script type="text/javascript"> 
window.onload = function(){ 
    //do something here 
} 
</script> 
+6

El único problema con esto es que si Otro código, también insertado en la página compuesta, hace lo mismo: el último en ganar. Redefinir window.onload funciona, pero se debe tener cuidado para asegurarse de que aún no se haya definido. –

+0

¡Muy cierto! Gracias por el recordatorio. –

+0

He visto un código que prueba si 'window.onload' está definido, y si es así, se refiere a él en una variable de temperatura, luego" llama "a esa variable desde el * new *' window.onload'. –

0
Page.ClientScriptManager.RegisterStartupScrip(this.GetType(), "startup", "startClock();", true); 

o el uso de prototipo

document.observe("dom:loaded", function() { 
    // code here 
}); 
1

La manera más limpia es utilizando un marco de JavaScript como jQuery. En jQuery se podría definir la función de carga de la siguiente manera:

$(function() { 
    // ... 
}); 

O, si no te gusta el estilo corto $();:

$(document).ready(function() { 
    // ... 
}); 
+0

De acuerdo. De hecho, comencé a usar jQuery unos meses después de publicar esta pregunta (hace casi un año), y me encanta. – Jagd

+0

Las versiones más recientes de jQuery requieren el estilo $ (document) .ready (...). –

+1

No. En versiones nunca el comportamiento de '$()' cambió, pero '$ (some_function)' no cambió. – ThiefMaster

Cuestiones relacionadas