2009-06-03 10 views
20

Mam aspx, który ma następujące funkcje javascript wykonywane podczas zdarzenia onload organizmu.Hak zdarzenia javascript do załadowania strony

<body onload="startClock();"> 

Jednak ustawiam ASPX do używania strony wzorcowej, więc tag body nie istnieje już w aspx. Jak mam zarejestrować funkcję startClock, aby działała po uderzeniu strony i nadal korzysta z masterpage?

Odpowiedz

30

Jeśli nie chcą jednoznacznie przypisać window.onload lub użyć ramy , rozważ:

<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 - Byłem zbyt leniwy, aby wpisać tę odpowiedź, ale w ten sposób chciałbym zasugerować, żeby ktoś to zrobił, z tymi samymi założeniami, które początkowo określasz. –

+0

Oczywiście, abym trochę streścił szczegóły - mam nadzieję, że jest to oczywiste dla OP ... –

+0

Muszę tu pomijać coś naprawdę oczywistego, ale gdzie podziała się blok kodu "jeśli"? Nie możesz po prostu zrzucić tego w tagu

1

Włóż to w dowolnym miejscu na ciele strony:

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

Jedyny problem z tym jest, jeśli jeden inny kod, również wciągnięty na stronę złożoną, robi to samo - ostatnie w wygranych. Przedefiniowanie window.onload działa, ale należy zachować ostrożność, aby upewnić się, że nie zostało ono jeszcze zdefiniowane! –

+0

Bardzo prawdziwe! Dzięki za przypomnienie. –

+0

Widziałem kod, który testuje, czy zdefiniowano 'window.onload', a jeśli tak, odnosi się do niego w zmiennej temp, a następnie" wywołuje "tę zmienną z * nowego *' window.onload'. –

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

lub za pomocą prototypowego

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

Najczystszym sposobem jest użycie struktury javascript, takiej jak jQuery. W jQuery można zdefiniować funkcję obciążeniem w następujący sposób:

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

Lub, jeśli nie podoba ci się krótkie $(); styl:

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

Uzgodnione. Właściwie zacząłem używać jQuery kilka miesięcy po opublikowaniu tego pytania (prawie rok temu) i uwielbiam to. – Jagd

+0

Nowsze wersje jQuery wymagają stylu $ (document) .ready (...). –

+1

Nie. W nigdy wersjach zachowanie '$()' zmieniło się, ale '$ (some_function)' nie uległo zmianie. – ThiefMaster