2011-01-30 16 views
153

Chcę uruchomić funkcję po wczytaniu strony, ale nie chcę jej używać w tagu body.działa funkcja po załadowaniu strony

Mam skrypt, który jest uruchamiany, jeśli zainicjować go w organizmie -jak to:

function codeAddress() { 
code..... 
} 

<body onLoad="codeAddress()"> 

Ale chcę go uruchomić bez ciała onLoad="codeAddress()" i ja tryed wiele rzeczy, na przykład w ten sposób:

window.onload = codeAddress; 

ale to nie działa?

Jak uruchomić go po załadowaniu strony?

+0

proszę pisać swój pełny kod. Jak powiedziałem Darinowi (ignorując pozostałe), powinno to zadziałać. Musi wystąpić błąd w innym miejscu, jeśli nie działa. – Skilldrick

+3

wszystkie popularne przeglądarki mogą wyświetlać błędy javascript - czy otrzymasz jakieś? – Christoph

+0

Czy używasz 'window.onload = codeAddress' po zdefiniowaniu' codeAddress() '? Jeśli tak, to powinno działać. Czy na pewno nie ma błędu w innym miejscu? – Skilldrick

Odpowiedz

253

window.onload = codeAddress; powinno działać - here's a demo oraz pełny kod:

<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
     <title>Test</title> 
 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
 
     <script type="text/javascript"> 
 
     function codeAddress() { 
 
      alert('ok'); 
 
     } 
 
     window.onload = codeAddress; 
 
     </script> 
 
    </head> 
 
    <body> 
 
    
 
    </body> 
 
</html>


<!DOCTYPE html> 
 
<html> 
 
    <head> 
 
     <title>Test</title> 
 
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
 
     <script type="text/javascript"> 
 
     function codeAddress() { 
 
      alert('ok'); 
 
     } 
 
     
 
     </script> 
 
    </head> 
 
    <body onload="codeAddress();"> 
 
    
 
    </body> 
 
</html>

+2

Jak już powiedziałem w mojej odpowiedzi, nie ma nic złego w tym kodzie, jak widziałem - powód, dla którego nie działa, musi być gdzieś błędem w JS. – Skilldrick

+0

jeśli umieścisz akapit z tekstem w treści, nie załaduje się, dopóki nie klikniesz OK. – FluorescentGreen5

+0

Ten globalny moduł obsługi zdarzeń jest dostępny tylko w przeglądarce Chrome. https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onload – Devappended

9
window.onload = function(){codeAddress();}; 
+10

Jest to odpowiednik 'window.onload = codeAddress' dla wszystkich zamiarów i celów. Jeśli to nie zadziała, nie ma powodu, by tak było. – Skilldrick

+0

Ok. O co ci chodzi? –

+9

Chodzi mi o to, że to strata czasu. Po co dodawać 15 znaków, które nic nie robią? – Skilldrick

3

Zapoznaj się z domReady script, który umożliwia konfigurację wielu funkcji do wykonania po załadowaniu modelu DOM. Zasadniczo to, co Dom zrobił w wielu popularnych bibliotekach JavaScript, ale jest lekkie i można je pobrać i dodać na początku zewnętrznego skryptu.

Przykład użycia

// add reference to domReady script or place 
// contents of script before here 

function codeAddress() { 

} 

domReady(codeAddress); 
31

Biorąc odpowiedź Darin ale styl jQuery. (Wiem, że użytkownik poprosił o javascript).

running fiddle

$(document).ready (function(){ 
    alert('ok'); 
});​ 
+4

Twoja odpowiedź nauczyła mnie wiele, ale nie o jQuery/javascript. – unicorn2

+0

Witaj Jeść w Joesie, nie działa –

+0

@VijayKumar to jest jQuery, nie natywny Javascript, więc potrzebujesz biblioteki jQuery dołączonej do pracy –

86

Zamiast używać jQuery lub window.onload, native JavaScript przyjęła kilka świetnych funkcji od czasu wydania jQuery. Wszystkie nowoczesne przeglądarki mają teraz własną funkcję DOM ready bez użycia biblioteki jQuery.

Polecam, jeśli używasz natywnego Javascript.

document.addEventListener('DOMContentLoaded', function() { 
    alert("Ready!"); 
}, false); 
+0

(pytanie noob: co robi 'false'?) –

+4

@ ᔕᖺᘎᕊ dla ' właściwości bąblów (których nie musisz uwzględniać, po prostu wypełniam wszystkie booleany dla dobrego nawyku). Istnieje również inna instrukcja boolowska dla właściwości "cancelable", ale nie jest to zbyt przydatne, ponieważ powyższa instrukcja jest już nieodwołalna. Przeczytaj więcej na ten temat tutaj: https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded –

+0

Dzięki - dałem Ci już +1 :) –

1

window.onload = function() { ... itp. Nie jest dobrą odpowiedzią.

To prawdopodobnie zadziała, ale złamie też wszelkie inne funkcje, które już są zawieszone na tym wydarzeniu. Lub, jeśli inna funkcja zaczepi się w tym wydarzeniu po twoim, to złamie twoje. Można więc spędzić wiele godzin później próbując dowiedzieć się, dlaczego coś, co działało, już nie istnieje.

Bardziej wytrzymałe odpowiedź here:

if(window.attachEvent) { 
    window.attachEvent('onload', yourFunctionName); 
} else { 
    if(window.onload) { 
     var curronload = window.onload; 
     var newonload = function(evt) { 
      curronload(evt); 
      yourFunctionName(evt); 
     }; 
     window.onload = newonload; 
    } else { 
     window.onload = yourFunctionName; 
    } 
} 

Niektóre kod używam, nie pamiętam gdzie znalazłem go dać kredyt autora.

function my_function() { 
    // whatever code I want to run after page load 
} 
if (window.attachEvent) {window.attachEvent('onload', my_function);} 
else if (window.addEventListener) {window.addEventListener('load', my_function, false);} 
else {document.addEventListener('load', my_function, false);} 

Nadzieja to pomaga :)

Powiązane problemy