394

Traditionally, to call a JavaScript function once the page has loaded, you'd add an onload attribute to the body containing a bit of JavaScript (usually only calling a function)

<body onload="foo()">

When the page has loaded, I want to run some JavaScript code to dynamically populate portions of the page with data from the server. I can't use the onload attribute since I'm using JSP fragments, which have no body element I can add an attribute to.

Is there any other way to call a JavaScript function on load? I'd rather not use jQuery as I'm not very familiar with it.

Kamil Kiełczewski
93.8k34 gold badges402 silver badges375 bronze badges
asked Oct 1, 2010 at 19:57
2
  • Can you either verify that Kevin's edit to your question is still asking the same question, or rephrase it to make sure we understand? (Are you trying to find an alternative to onload?) Commented Oct 1, 2010 at 20:06
  • 1
    Does this answer your question? How to make JavaScript execute after page load? Commented Feb 9, 2021 at 21:08

9 Answers 9

592

If you want the onload method to take parameters, you can do something similar to this:

window.onload = function() {
 yourFunction(param1, param2);
};

This binds onload to an anonymous function, that when invoked, will run your desired function, with whatever parameters you give it. And, of course, you can run more than one function from inside the anonymous function.

ˈvɔlə
10.4k12 gold badges76 silver badges109 bronze badges
answered Oct 1, 2010 at 20:38
Sign up to request clarification or add additional context in comments.

6 Comments

And now when I'm dynamically including a server-generated page and need DOM-readiness, I need to work through this minefield. If only someone would have encouraged properly library user earlier.
I didn't say it was a good idea. Though the lead dev where I work has a strong case of Not Invented Here syndrome, and I haven't been able to convince him to use jquery, outside of a few pages.
Then perhaps you should switch jobs. If the right tool for the job isn't the tool you're using, why beat your head against the wall constantly battling the incompetent?
If another script has already loaded a function on window.onload, this method will override it. This could an issue in some cases. The document.addEventListener approach seems preferable to me.
Just a tip. Document.onload() is used when the DOM is fully loaded, whereas Window.onload() is used when the graphical part is loaded for presentation. Document.onload is pretty much just behind-the-scenes, so I recommend using that if possible, since it uses none of your cpu...or gpu, I don't know, I looked this up.
|
172

Another way to do this is by using event listeners, here's how you use them:

document.addEventListener("DOMContentLoaded", function() {
 your_function(...);
});

Explanation:

DOMContentLoaded It means when the DOM objects of the document are fully loaded and seen by JavaScript. Also this could have been "click", "focus"...

function() Anonymous function, will be invoked when the event occurs.

Matthias Braun
34.9k27 gold badges158 silver badges177 bronze badges
answered Apr 28, 2012 at 21:35

2 Comments

Note that this will not work in IE 8 and lower. Otherwise this is the best pure JS solution!
This is the correct answer as the accepted answer would lead to conflicts if there's more than one method to be called on load.
77

Your original question was unclear, assuming Kevin's edit/interpretation is correct, then this first option doesn't apply

The typical options is using the onload event:

<body onload="javascript:SomeFunction()">
....

You can also place your JavaScript at the very end of the body; it won't start executing until the doc is complete.

<body>
 ...
 <script type="text/javascript">
 SomeFunction();
 </script>
</body>

Another option is to use a JS framework which intrinsically does this:

// jQuery
$(document).ready( function () {
 SomeFunction();
});
Matthias Braun
34.9k27 gold badges158 silver badges177 bronze badges
answered Oct 1, 2010 at 19:59

3 Comments

The javascript: in the onload is unnecessary, albeit not harmful.
@STW <script type="text/javascript">LoadResult();</script> gives Uncaught ReferenceError: LoadResult is not defined
where do i write contents of SomeFunction()?
53
function yourfunction() { /* do stuff on page load */ }
window.onload = yourfunction;

Or with jQuery if you want:

$(function(){
 yourfunction();
});

If you want to call more than one function on page load, take a look at this article for more information:

Philipp
11.5k9 gold badges69 silver badges75 bronze badges
answered Oct 1, 2010 at 19:59

7 Comments

This is not correct, the function will execute and assign whatever it returns to onload. The () should not be there.
If there are other functions that are listening for the onload event this will blow them away. Better to add an event listener rather than assign an event handler directly. Even in this case you would assign it as `window.onload = yourfunction' without the function closure, not the way you have it. Your way seeks to execute yourfunction() at the time of the assignment.
that will assign the return value of the function to window.onload, which will not work, unless the return value is a function.
@epascarello: Good catch, fixed, you see a habit when writing function names. Thanks
window.onload = yourfunction; The problem with this way is that it dosen't accept fucntion parameter !!
|
14

<!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>

answered Apr 3, 2017 at 8:49

Comments

8

You have to call the function you want to be called on load (i.e., load of the document/page). For example, the function you want to load when document or page load is called "yourFunction". This can be done by calling the function on load event of the document. Please see the code below for more detail.

Try the code below:

<script src="js/jquery-1.11.0.min.js" type="text/javascript"></script>
<script type="text/javascript">
 $(document).ready(function () {
 yourFunction();
 });
 function yourFunction(){
 //some code
 }
</script>
answered Feb 26, 2014 at 13:59

Comments

5

here's an example with es6 and no jquery:

window.onload = () => {
 foo()
}

see the mdn docs: https://developer.mozilla.org/en-US/docs/Web/API/Window/load_event

answered Sep 27, 2023 at 15:48

1 Comment

Doesn't this have all the problems the top answer has?
4

Here's the trick (works everywhere):

r(function(){
 alert('DOM Ready!');
});
function r(f){
 /in/.test(document.readyState) 
 ? setTimeout('r(' + f + ')', 9)
 : f();
}
General Grievance
5,12039 gold badges40 silver badges60 bronze badges
answered May 20, 2015 at 11:32

3 Comments

Uh. I think this is not a code obfuscation contest.
@abhishek can you explain what your code does? It's unclear, therefore useless.
A few problems: 1) The function names are not good. 2) Don't use setTimeout with a string. 3) It's not clear that you're testing for interactive in the code. 4) Recursively polling is a really awkward way to do this. JavaScript has events for a reason.
1

For detect loaded html (from server) inserted into DOM use MutationObserver or detect moment in your loadContent function when data are ready to use

let ignoreFirstChange = 0;
let observer = (new MutationObserver((m, ob)=>
{
 if(ignoreFirstChange++ > 0) console.log('Element added on', new Date());
}
)).observe(content, {childList: true, subtree:true });
// TEST: simulate element loading
let tmp=1;
function loadContent(name) { 
 setTimeout(()=>{
 console.log(`Element ${name} loaded`)
 content.innerHTML += `<div>My name is ${name}</div>`; 
 },1500*tmp++)
}; 
loadContent('Senna');
loadContent('Anna');
loadContent('John');
<div id="content"><div>

answered Apr 8, 2019 at 19:48

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.