window.onload in external script gets ignored in Javascript
Solution 1
1)The way you're binding, you can have just one method attached to an event. You need to add an event listener for what you want.
window.addEventListener("load", function() { alert("hello!");});
Setting directly a method to the onload event will replace any previously attached method. But if you use listeners instead, you can have many of them bound to an event.
2)If you comment out the onload in your external file, when the document.getElementsByClassName("bar")
is called, your document isn't ready yet, then, it will return 0 items.
3)Use the addEventListener as I explained in the first point. If you apply this in both places, it will work like a charm.
Solution 2
onload
is a property of window. It acts like any other variable property. When you try to use it twice you're overwriting the original value with your second write.
So your entire external script is ignored when you wrap it in window.onload
, because window.onload
is then overwritten to be
function() {
console.log("hello from html");
};
If you want to do execute 2 functions, define 2 functions, a
and b
,
and set window.onload
like this:
window.onload = function(){
a();
b();
}
Alternatively, you can bind 2 separate events in the way Alcides' answer suggests. My personal view is that its cleaner to do a single bind with multiple functions since its easier to know whats bound, know what order your functions will execute in, and see everything thats happening in one place, but its mostly a matter of style/preference if the order doesn't matter.
Related videos on Youtube
user1643156
Updated on July 09, 2022Comments
-
user1643156 almost 2 years
index.html
<html> <head> <script type="text/javascript" src="foo.js"></script> <script type="text/javascript"> window.onload = function() { console.log("hello from html"); }; </script> </head> <body> <div class="bar">bar</div> </body> </html>
foo.js
// this js file will be completely ignored with window.onload //window.onload = function() { console.log("hello from external js"); var bar = document.getElementsByClassName("bar"); // this returns 0 instead of 1 console.log(bar.length); //};
- When
window.onload
is used in html,window.onload
from external js will be ignored. - When
window.onload
from external js is commented out,bar.length
returns 0. - When
window.onload
from html is removed,window.onload
from external js works fine.
Can anyone explain why I can't use both
window.onload
?If I had to use
window.onload
in html, how do tell if window is loaded from external js?-
Si8 about 11 yearsWhy don't you try to use a different text in alert funtion for the external js file, to see where it loaded from?
-
mm4096 over 2 yearsUse onload in your index page
- When
-
user1643156 about 11 yearsI replaced
window.onload
withwindow.addEventListener
in the external js, like you said, it works like a charm. Thank you.