ChatGPT解决这个技术问题 Extra ChatGPT

How do I call a JavaScript function on page load?

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.

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?)
Does this answer your question? How to make JavaScript execute after page load?

ˈ
ˈvɔlə

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.


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?
And can I call the same yourfunction second time using onclick event on button?
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.
M
Matthias Braun

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.


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.
M
Matthias Braun

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();
});

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()?
P
Philipp
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:

Using Multiple JavaScript Onload Functions


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

Test


I think his answer is clear, as you can see the script is put in the head tag thus allowing it to be executed before the body content.. or let's say preload its functions or whatever.. sometimes a person ask questions because he don't know at all, but it's never the case where someone would spoon feed you, nor anyone in this community would, you have to look up stuff yourself a little bit more. #especially_that_you're_a_web_developer
A
Amir Md Amiruzzaman

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>

A
Abhishek

here's the trick (works everywhere):

r(function(){
alert('DOM Ready!');
});
function r(f){/in/.test(document.readyState)?setTimeout('r('+f+')',9):f()}

Uh. I think this is not a code obfuscation contest.
@abhishek can you explain what your code does? It's unclear, therefore useless.
K
Kamil Kiełczewski

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 += `

My name is ${name}
`; },1500*tmp++) }; loadContent('Senna'); loadContent('Anna'); loadContent('John');