2009-06-03 12 views
20

Ho un aspx che ha la seguente funzione javascript in esecuzione durante l'evento onload del corpo.Agganciare un evento javascript al caricamento della pagina

<body onload="startClock();"> 

Comunque, sto impostando l'aspx per utilizzare una pagina master, in modo che il tag body non esiste nel aspx più. Come faccio a registrare la funzione startClock da eseguire quando viene colpita la pagina e continuo ad usare una masterpage?

risposta

30

Se non si desidera assegnare esplicitamente window.onload o utilizzare un quadro , considerare:

<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 - Ero troppo pigro per scrivere questa risposta, ma questo è il modo in cui suggerirei che qualcuno lo facesse, con le stesse ipotesi che inizialmente asserite. –

+0

Ovviamente, vorrei astrarre i dettagli un pochino - si spera che sia ovvio per l'OP ... –

+0

Mi manca qualcosa di ovvio qui, ma dove va il blocco "se" del codice? Non puoi semplicemente scaricarlo in un tag

1

Inserire questo in qualsiasi parte del corpo della pagina:

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

L'unico problema di questo è se l'altro codice, anch'esso inserito nella pagina composita, fa la stessa cosa: ultimo nelle vittorie. Ridefinire window.onload funziona, ma occorre fare attenzione per assicurarsi che non sia già stato definito! –

+0

Molto vero! Grazie del promemoria. –

+0

Ho visto il codice che verifica per vedere se 'window.onload' è definito, e se è così, fa riferimento ad esso in una variabile temporanea, quindi" chiama "quella variabile all'interno del * nuovo *' window.onload'. –

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

o utilizzando prototipo

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

Il modo più pulito è utilizzare un framework javascript come jQuery. In jQuery si potrebbe definire la funzione sotto carico nel seguente modo:

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

Oppure, se non ti piace il breve $(); stile:

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

concordato. In realtà ho iniziato a usare jQuery alcuni mesi dopo aver postato questa domanda (quasi un anno fa adesso), e mi piace. – Jagd

+0

Le versioni più recenti di jQuery richiedono lo stile $ (document) .ready (...). –

+1

No. In mai versioni il comportamento di '$()' è cambiato, ma '$ (some_function)' non è cambiato. – ThiefMaster

Problemi correlati